zaigie / palworld-server-tool

[中文|English|日本語]基于.sav存档解析和REST&RCON优雅地用可视化界面管理幻兽帕鲁专用服务器。/ Through parse .sav and REST&RCON, visual interface management PalWorld dedicated server.
Apache License 2.0
806 stars 93 forks source link

使用 docker:// 掛載存檔有問題 #90

Closed Minidoracat closed 9 months ago

Minidoracat commented 9 months ago

在 docker-compose.yml 中設定

SAVE__PATH="docker://<container_name_or_id>:<游戏存档目录>"
SAVE__PATH="docker://palworld-docker-1-palworld-1:/palworld/Pal/Saved"

使用這種方式出現錯誤

ask/task.go:33 | error copying file from container: exit status 1272024/02/03 - 16:36:53 | INFO | task/task.go:35 | Sav sync done

已確認以下指令能正確複製檔案到外部

sudo docker cp palworld-docker-1-palworld-1:/palworld/Pal/Saved/SaveGames/0/5A5E146F711B497FB7E4BFA237003455/Level.sav /tmp/Level.sav
Successfully copied 31.6MB to /tmp/Level.sav

容器名稱跟路徑是正確的 所以可能是程式在判斷 docker:// 開頭的路徑有問題,請確認一下

後來是因為我本來 palworld 伺服器的存檔本來就有掛載到外部 所以我改用掛載到外部的 volumes 是能成功讀取到 sav

另外 RCON,也是後來另外使用

sudo docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' palworld-docker-1-palworld-1

這個命令去查詢到 172.17.0.2 有成功掛載 不過如果可以用容器名稱會更好,但是我不知道為何沒辦法

Minidoracat commented 9 months ago

後來發現是我使用了 network_mode: bridge 拿掉後使用 docker 預設網路 就可以用 - RCON__ADDRESS=palworld:25575 但是 SAVE__PATH 依然無法使用容器路徑

zaigie commented 9 months ago

看起来像是调用命令行时,程序内执行的其实是 docker 而不是 sudo docker 我默认当前用户组不需要 sudo 去执行 下个版本我会直接引入docker client,使用docker同步存档时需挂载 ../run/docker.sock ,而不是调用命令行的 docker or sudo docker ,就能解决这个问题

zaigie commented 9 months ago

後來發現是我使用了 network_mode: bridge

拿掉後使用 docker 預設網路

就可以用 - RCON__ADDRESS=palworld:25575

但是 SAVE__PATH 依然無法使用容器路徑

RCON使用的是网络路径,因此你调整后使用 host:port有效,而SAVE__PATH使用的是docker客户端的 cp 命令,本身 docker cp支持的就是容器ID/Name

zaigie commented 9 months ago

v0.5.4 更新了使用方法