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

这刚刚为我解决了这个问题:

  1. 在 Windows 10
  2. 安装了 WSL2
  3. 使用 PowerShell 并导航到 acme.json 文件所在的目录
  4. 键入 wsl,这将打开相同的位置,但现在来自 WSL2
  5. 类型chmod 600 acme.json
  6. 完成!

我用命名的 docker 卷解决了这个问题:

docker-compose.yml (只显示文件的相关部分)

services:
  traefik:
    environment:
    - TRAEFIK_CERTIFICATESRESOLVERS_LE_ACME_STORAGE=/acme/acme.json
    volumes:
      - acme:/acme
volumes:
  acme: