acme.json 的 traefik 权限 777 太开放,请使用 600
traefik permissions 777 for acme.json are too open, please use 600
是的,
当我尝试使用 https 运行 traefik 时,我得到了这个。问题是我在我的 Win7 机器上挂载了目录,但我无法修改文件。
挂载正常,但文件权限已关闭。
看起来像这样:
volumes
- d:/docker/traefikcompose/acme/acme.json:/etc/traefik/acme/acme.json:rw
traefik | time="2018-09-04T12:57:11Z" level=error msg="Error
starting provider *acme.Provider: unable to get ACME account :
permissions 777 for /etc/traefik/acme/acme.json are too open, please
use 600"
如果我删除 acme.json 文件,我会得到:
ERROR: for traefik Cannot start service traefik: b'OCI runtime create
failed: container_linux.go:348: starting container process caused
"process_linux.go:402: container init caused \"rootfs_linux.go:58:
mounting \\"/d/docker/traefikcompose/acme/acme.json\\" to
rootfs
\\"/mnt/sda1/var/lib/docker/aufs/mnt/c84d8644252848bde8f0322bafba3d206513ceb8479eb95aeee0b4cafd4a7251\\"
at
\\"/mnt/sda1/var/lib/docker/aufs/mnt/c84d8644252848bde8f0322bafba3d206513ceb8479eb95aeee0b4cafd4a7251/etc/traefik/acme/acme.json\\"
caused \\"not a directory\\"\"": unknown: Are you trying to
mount a directory onto a file (or vice-versa)? Check if the specified
host path exists and is the expected type'
感谢 Cooshals 的帮助,我终于找到了解决方案,
我们必须通过 ssh 进入 virtualbox-machine 并在那里制作文件,然后直接从 docker-compose.yml 指出它,在这种情况下我是这样做的:
docker-machine ssh default
touch /var/acme.json
chmod 600 /var/acme.json
然后在我的 docker-compose:
volumes:
- /var/:/var/acme.json
终于在 traefik.toml:
[acme]
storage = "acme.json"
除了上述答案之外,要自动创建 acme.json
文件并分配所需的权限,请创建一个 Dockerfile 并在您的 docker.compose.yml
中调用它
FROM traefik:2.2
RUN touch /acme.json \
&& chmod 600 /acme.json
这刚刚为我解决了这个问题:
- 在 Windows 10
安装了 WSL2
- 使用 PowerShell 并导航到
acme.json
文件所在的目录
- 键入
wsl
,这将打开相同的位置,但现在来自 WSL2
- 类型
chmod 600 acme.json
- 完成!
我用命名的 docker 卷解决了这个问题:
docker-compose.yml
(只显示文件的相关部分)
services:
traefik:
environment:
- TRAEFIK_CERTIFICATESRESOLVERS_LE_ACME_STORAGE=/acme/acme.json
volumes:
- acme:/acme
volumes:
acme:
是的, 当我尝试使用 https 运行 traefik 时,我得到了这个。问题是我在我的 Win7 机器上挂载了目录,但我无法修改文件。
挂载正常,但文件权限已关闭。
看起来像这样:
volumes
- d:/docker/traefikcompose/acme/acme.json:/etc/traefik/acme/acme.json:rw
traefik | time="2018-09-04T12:57:11Z" level=error msg="Error starting provider *acme.Provider: unable to get ACME account : permissions 777 for /etc/traefik/acme/acme.json are too open, please use 600"
如果我删除 acme.json 文件,我会得到:
ERROR: for traefik Cannot start service traefik: b'OCI runtime create failed: container_linux.go:348: starting container process caused "process_linux.go:402: container init caused \"rootfs_linux.go:58: mounting \\"/d/docker/traefikcompose/acme/acme.json\\" to rootfs \\"/mnt/sda1/var/lib/docker/aufs/mnt/c84d8644252848bde8f0322bafba3d206513ceb8479eb95aeee0b4cafd4a7251\\" at \\"/mnt/sda1/var/lib/docker/aufs/mnt/c84d8644252848bde8f0322bafba3d206513ceb8479eb95aeee0b4cafd4a7251/etc/traefik/acme/acme.json\\" caused \\"not a directory\\"\"": unknown: Are you trying to mount a directory onto a file (or vice-versa)? Check if the specified host path exists and is the expected type'
感谢 Cooshals 的帮助,我终于找到了解决方案,
我们必须通过 ssh 进入 virtualbox-machine 并在那里制作文件,然后直接从 docker-compose.yml 指出它,在这种情况下我是这样做的:
docker-machine ssh default
touch /var/acme.json
chmod 600 /var/acme.json
然后在我的 docker-compose:
volumes:
- /var/:/var/acme.json
终于在 traefik.toml:
[acme]
storage = "acme.json"
除了上述答案之外,要自动创建 acme.json
文件并分配所需的权限,请创建一个 Dockerfile 并在您的 docker.compose.yml
FROM traefik:2.2
RUN touch /acme.json \
&& chmod 600 /acme.json
这刚刚为我解决了这个问题:
- 在 Windows 10 安装了 WSL2
- 使用 PowerShell 并导航到
acme.json
文件所在的目录 - 键入
wsl
,这将打开相同的位置,但现在来自 WSL2 - 类型
chmod 600 acme.json
- 完成!
我用命名的 docker 卷解决了这个问题:
docker-compose.yml (只显示文件的相关部分)
services:
traefik:
environment:
- TRAEFIK_CERTIFICATESRESOLVERS_LE_ACME_STORAGE=/acme/acme.json
volumes:
- acme:/acme
volumes:
acme: