是的,当我试图用https运行traefik时,我得到了这个。问题是我在win7机器上挂载了dir,但是我不能对文件进行chmod。
装载正在工作,但文件权限已关闭。
看起来像这样:
volumes
- d:/docker/traefikcompose/acme/acme.json:/etc/traefik/acme/acme.json:rw
特赖菲克|time ="2018 - 09 - 04T12:57:11Z" level = error msg ="启动提供程序时出错 * acme。提供程序:无法获取ACME帐户:/etc/traefik/acme/acme.json的权限777太开放,请使用600 "
如果我删除acme.json文件,我会得到这个:
错误:对于traefik无法启动服务traefik:b'OCI运行时创建失败:浏览次数:348次启动容器进程导致"process_linux. go:402:容器初始化导致"rootfs_linux. go:58:正在将"/d/docker/traefikcompose/acme/acme. json "装载到\"/mnt/sda1/var/lib/docker/aufs/mnt/c84d8644252848bde8f0322bafba3d206513ceb8479eb95aeee0b4cafd4a7251"的根文件系统\",该文件系统位于\"/mnt/sda1/var/lib/docker/aufs/mnt/ c84d8644252848bde8f0322bafba3d206513ceb8479eb95aeee0b4cafd4a7251/etc/traefik/acme/acme. json导致\"不是一个目录\"":unknown:您是否尝试将目录装入文件(反之亦然)?请检查指定的主机路径是否存在以及是否为预期类型
6条答案
按热度按时间ryoqjall1#
多亏了Cooshals的帮助我终于找到了解决办法
我们必须ssh到virtualbox-machine并在那里创建文件,然后直接从docker-composite.yml中指出它,在本例中我是这样做的:
然后在我的docker-compose中:
最后在traefik.toml:
taor4pac2#
除了上面的答案之外,要自动创建
acme.json
文件并分配所需的权限,请创建一个Dockerfile并在docker.compose.yml
中调用它wljmcqd83#
我用一个命名的Docker卷解决了这个问题:
docker-compose.yml(仅显示文件的相关部分)
dgiusagp4#
这正好解决了我的问题:
1.在Windows 10中安装WSL2
1.使用PowerShell并导航到
acme.json
文件所在的目录1.键入
wsl
,这将打开相同的位置,但现在是从WSL2打开1.类型
chmod 600 acme.json
1.成交!
wkftcu5l5#
我和你有同样的问题,希望acme.json文件在容器/卷之外,也就是说,在主机FS上。这样我想使备份变得容易,因为我的测试有时会很快超过让我们加密/ACME配额。
坞站窗口
原来在Docker Windows上,您可以在traefik容器内获得此权限:
Linux(Ubuntu 22.04版本)
如果traefik在主机端使用类似于以下内容创建文件:
在Linux Docker上,容器端看起来不同:
但在主机上我还有这个:
这意味着我的普通用户无法看到/备份或修改该文件。
我认为目前还没有足够的支持在主机文件系统端维护这个文件。
建议
将此文件存储在Docker卷中,并使用"docker cp"访问它:
备份:
恢复:
guicsvcw6#
This can be solved using a Dockerfile / entrypoint.sh and works like this:
停靠文件
entrypoint.sh
在docker-compose. yaml中,我有:
So a docker compose build && docker compose up -d updated the file permissions according to the script in the entrypoint.sh
Note: It is important to do the updates of the /acme/acme.json file from the entrypoint.sh as the volumes are mounted then already. This is not the case when only using a Dockerfile.
注意:我使用的是docker compose,但是docker也支持这个,但是命令的synatx不同。
总结
我认为这也是太多的维护负担。在Docker社区中,我们应该提出一个卷系统,可以为容器在目录上设置所有者/模式,并让主机上的文件成为它们拥有的任何所有者/模式。
卷数:
此外,如果主机上不存在该文件,则只需创建它。Linux Docker确实会在主机上创建它,而Docker Windows将无法启动Docker compose up-d命令。