我对 Docker 还比较陌生。
我目前正在尝试在 MacOS 上运行 docker 容器。容器基于itzg/minecraft-server
镜像。以正常方式运行容器没问题,但是我想要做的是将所有 Minecraft 服务器数据与特定目录同步。
例如,我想确保当我创建一个docker容器时,所有数据都已被创建或同步/Users/myname/MCServer
(例如)。
我学会了这里我可以通过附加 -v 作为参数,然后添加服务器数据应位于的目录来做到这一点。
我首先尝试了以下操作:
docker run -v /Users/myname/Documents/MC Servers/Docker/Test:/data -d -it -p 32930:32930 -e TYPE=PAPER -e ONLINE_MODE=false -e SERVER_PORT=32930 -e EULA=TRUE -e VERSION=1.8.8 --name OpenSourcee itzg/minecraft-server
好吧,这样做效果不太好:
docker: invalid reference format: repository name must be lowercase.
See 'docker run --help'.
经过一番研究,我发现我可以使用 ` 符号来实现想要的效果。此外,我了解到 MC Servers 目录的名称中不能包含空格,因此我将其重命名为 MC_Servers。我还添加了 sudo(但也尝试过不添加 sudo)。以下是新命令:
sudo docker run -v `/Users/myname/Documents/MC_Servers/Docker/Test` -d -it -p 32930:32930 -e TYPE=PAPER -e ONLINE_MODE=false -e SERVER_PORT=32930 -e EULA=TRUE -e VERSION=1.8.8 --name OpenSourcee itzg/minecraft-server
不幸的是,这种方法没有起到效果,这次抛出了:
zsh: permission denied: /Users/myname/Documents/MC_Servers/Docker/Test
出现错误后,服务器启动了,但是没有文件/Users/myname/Documents/MC_Servers/Docker/Test
......
如果有人能告诉我 -v 标签是否可以使 docker 使用给定的目录来创建我的 Minecraft 服务器并将其所有数据放入其中,以及如果可以,如何解决我遇到的权限错误,我将不胜感激。
谢谢!
答案1
引用您的卷定义。那里有一个空格,通常用于分隔参数,因此 docker 正在尝试查找Servers/Docker/Test:/data
不是有效图像名称的图像。
docker run \
-v "/Users/myname/Documents/MC Servers/Docker/Test:/data" \
-d -it -p 32930:32930 \
-e TYPE=PAPER \
-e ONLINE_MODE=false \
-e SERVER_PORT=32930 \
-e EULA=TRUE \
-e VERSION=1.8.8 \
--name OpenSourcee itzg/minecraft-server