使用Windows容器在docker桌面上运行Consul并打开实验模式效果很好。但是,如果我尝试将bitnami consul的数据文件挂载到本地卷挂载,则会出现以下错误:
chown: cannot access '/bitnami/consul'
我的撰写文件如下:
version: "3.7"
services:
consul:
image: bitnami/consul:latest
volumes:
- ${USERPROFILE}\DockerVolumes\consul:/bitnami
ports:
- '8300:8300'
- '8301:8301'
- '8301:8301/udp'
- '8500:8500'
- '8600:8600'
- '8600:8600/udp'
networks:
nat:
aliases:
- consul
如果删除卷部分,则一切正常,但无法持久保存数据。如果遵循readme file中的说明。说到拥有适当的权限,但我不知道如何使用docker桌面使它正常工作。
旁注如果我不是挂载/bitnami
,而是挂载/bitnami/consul
,则会出现以下错误:2020-03-30T14:59:00.327Z [ERROR] agent: Error starting agent: error="Failed to start Consul server: Failed to start Raft: invalid argument"
Consul容器是non-root container,在这种情况下,非root用户应该能够在该卷中写入。
将主机目录用作卷,需要确保要装入到容器中的目录具有适当的权限,在这种情况下,该权限为others
的可写权限。您可以通过运行sudo chmod o+x ${USERPROFILE}\DockerVolumes\consul
(或主机目录的正确路径)来修改权限。
此本地文件夹是在您首次运行docker-compose up
时创建的,也可以使用mkdir
自己创建。创建(手动或自动)后,您应该使用chmod
授予适当的权限。
我不熟悉Docker桌面或Windows环境,但是您应该能够使用CLI进行等效的操作。
另一种选择是通过添加user: root
指令来编辑docker-compose.yaml以将consul容器部署为root:
version: "3.7"
services:
consul:
image: bitnami/consul:latest
user: root
volumes:
- ${USERPROFILE}\DockerVolumes\consul:/bitnami
ports:
- '8300:8300'
- '8301:8301'
- '8301:8301/udp'
- '8500:8500'
- '8600:8600'
- '8600:8600/udp'
networks:
nat:
aliases:
- consul
没有user: root
,容器将以非root用户身份执行(用户1001):
▶ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0c590d7df611 bitnami/consul:1 "/opt/bitnami/script…" 4 seconds ago Up 3 seconds 0.0.0.0:8300-8301->8300-8301/tcp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301->8301/udp, 0.0.0.0:8600->8600/tcp, 0.0.0.0:8600->8600/udp bitnami-docker-consul_consul_1
▶ dcexec 0c590d7df611
I have no name!@0c590d7df611:/$ whoami
whoami: cannot find name for user ID 1001
但是添加此行后,容器将以root
的身份执行:
▶ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ac206b56f57b bitnami/consul:1 "/opt/bitnami/script…" 5 seconds ago Up 4 seconds 0.0.0.0:8300-8301->8300-8301/tcp, 0.0.0.0:8500->8500/tcp, 0.0.0.0:8301->8301/udp, 0.0.0.0:8600->8600/tcp, 0.0.0.0:8600->8600/udp bitnami-docker-consul_consul_1
▶ dcexec ac206b56f57b
root@ac206b56f57b:/# whoami
root
如果容器以root
执行,则主机卷中的权限应该没有任何问题。