Docker在两台不同的机器上安装不同的path和相同的configuration

我的docker撰写服务的条目是:

api: restart: always build: ./project/api volumes: - ./:/usr/src/app:ro - ~/data:/root/data:ro # /root is the ~ in container 

我运行我的容器使用

 sudo docker-compose down && sudo docker-compose up --build -d 

我有两个不同的机器,都与admin用户。 在检查创build的容器时:

 sudo docker inspect project_api_1 | grep Mounts -A20 

在机器1上,admin用户是admin:x:1005:1001:Admin User,,,:/home/admin:/bin/zshadmin:x:1000:1000:Debian:/home/admin:/bin/zsh在机器2上

机器上的输出1

  "Mounts": [ { "Type": "bind", "Source": "/home/admin/project", "Destination": "/usr/src/app", "Mode": "ro", "RW": false, "Propagation": "rprivate" }, { "Type": "bind", "Source": "/home/admin/data", "Destination": "/root/data", "Mode": "ro", "RW": false, "Propagation": "rprivate" } ], 

机器2上的输出

  "Mounts": [ { "Type": "bind", "Source": "/home/admin/project", "Destination": "/usr/src/app", "Mode": "ro", "RW": false, "Propagation": "rprivate" }, { "Type": "bind", "Source": "/root/data", "Destination": "/root/data", "Mode": "ro", "RW": false, "Propagation": "rprivate" } ], 

在机器1上, /root/data指向/home/admin/data ,这是所需的行为,但在机器2上指向/root/data 。 我可以通过使用相对path./data (符号链接到〜/ data)或通过使用绝对path/home/admin/data 。 我的docker版本在两台机器上都是一样的 – Docker version 17.06.0-ce, build 02c1d87

我很好奇,为什么这是不同的?

在你的yaml文件中,你正在使用〜/ data ,其中〜是你用来运行docker的用户主目录的简写。 从这个angular度来说,我想你是在pipe理员上运行机器1上的docker,而你是以root身份运行机器2上的docker。

您应该记住,源目录是主机(不是容器)上的一个目录,所以与相关的用户是主机上的用户。