docker acme.json的traefik权限777太开放,请使用600

thigvfpy  于 2022-12-26  发布在  Docker
关注(0)|答案(6)|浏览(186)

是的,当我试图用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:您是否尝试将目录装入文件(反之亦然)?请检查指定的主机路径是否存在以及是否为预期类型

ryoqjall

ryoqjall1#

多亏了Cooshals的帮助我终于找到了解决办法
我们必须ssh到virtualbox-machine并在那里创建文件,然后直接从docker-composite.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"
taor4pac

taor4pac2#

除了上面的答案之外,要自动创建acme.json文件并分配所需的权限,请创建一个Dockerfile并在docker.compose.yml中调用它

FROM traefik:2.2

RUN touch /acme.json \
  && chmod 600 /acme.json
wljmcqd8

wljmcqd83#

我用一个命名的Docker卷解决了这个问题:
docker-compose.yml(仅显示文件的相关部分)

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

dgiusagp4#

这正好解决了我的问题:
1.在Windows 10中安装WSL2
1.使用PowerShell并导航到acme.json文件所在的目录
1.键入wsl,这将打开相同的位置,但现在是从WSL2打开
1.类型chmod 600 acme.json
1.成交!

wkftcu5l

wkftcu5l5#

我和你有同样的问题,希望acme.json文件在容器/卷之外,也就是说,在主机FS上。这样我想使备份变得容易,因为我的测试有时会很快超过让我们加密/ACME配额。

坞站窗口

原来在Docker Windows上,您可以在traefik容器内获得此权限:

-rwxrwxrwx    1 root     root           0 Dec 22 15:21 acme.json and on Linux

Linux(Ubuntu 22.04版本)
如果traefik在主机端使用类似于以下内容创建文件:

docker run -v ./acme:/acme ... traefik

在Linux Docker上,容器端看起来不同:

-rw-------    1 root     root       15.7K Dec 22 15:14 acme.json

但在主机上我还有这个:

-rw-------    1 root     root       15.7K Dec 22 15:14 acme.json

这意味着我的普通用户无法看到/备份或修改该文件。
我认为目前还没有足够的支持在主机文件系统端维护这个文件。

建议

将此文件存储在Docker卷中,并使用"docker cp"访问它:
备份:

docker container cp traefik:/acme/acme.json .

恢复:

docker container cp acme.json traefik:/acme/
docker exec -it traefik -> chmod 0700 /acme/acme.json
docker container restart traefik
guicsvcw

guicsvcw6#

This can be solved using a Dockerfile / entrypoint.sh and works like this:

停靠文件

FROM traefik:v2.9.4

COPY entrypoint.sh /
ENTRYPOINT [ "/entrypoint.sh" ]
CMD ["traefik"]

entrypoint.sh

#! /bin/sh
set -e

echo "Setting acme.json permissions 0600"
touch /works
touch /acme/acme.json
chmod 600 /acme/acme.json
chown root:root /acme
chown root:root /acme/acme.json

# first arg is `-f` or `--some-option`
if [ "${1#-}" != "$1" ]; then
    set -- traefik "$@"
fi

# if our command is a valid Traefik subcommand, let's invoke it through Traefik instead
# (this allows for "docker run traefik version", etc)
if traefik "$1" --help >/dev/null 2>&1
then
    set -- traefik "$@"
else
    echo "= '$1' is not a Traefik command: assuming shell execution." 1>&2
fi

exec "$@"

在docker-compose. yaml中,我有:

traefik:
  #image: traefik:v2.9.4
  build: traefik/

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社区中,我们应该提出一个卷系统,可以为容器在目录上设置所有者/模式,并让主机上的文件成为它们拥有的任何所有者/模式。
卷数:

  • "文件:acme. json文件:/acme. json文件:根文件:根文件:0600"

此外,如果主机上不存在该文件,则只需创建它。Linux Docker确实会在主机上创建它,而Docker Windows将无法启动Docker compose up-d命令。

相关问题