version: "3.3"
services:
traefik:
image: bluelake/traefik-dev:1.0.0.1
container_name: "traefik"
command:
- /bin/sh
- -c
- sh /configuration/download.sh && sh ./entrypoint.sh traefik
build:
context: .
dockerfile: './docker/traefik/Dockerfile'
restart: always
ports:
- "80:80"
- "81:81"
- "443:443"
volumes:
- ./configuration:/configuration
- ./traefik.yml:/etc/traefik/traefik.yml
- /var/run/docker.sock:/var/run/docker.sock:ro
networks:
- webgateway
networks:
webgateway:
external: true
这是我的 docker-compose 文件
当我运行 docker-compose up 时,我得到:
traefik | = '/bin/sh' is not a Traefik command: assuming shell execution.
: not found| /configuration/download.sh: line 2:
我将 download.sh 文件更改为空文件,运行后仍然出现相同的错误:
docker-compose --build 来重建整个 traefik 镜像,但我仍然收到相同的错误。你知道为什么吗?唯一能让它起作用的是删除:
sh /configuration/download.sh
我想知道我需要做什么才能让 bin/sh 在我的 WSL2 实例上运行。由于某种原因,bash 和 WSL2 似乎存在问题。
答案1
我没有使用过 Traefik,但这看起来就像是 Compose 文件中的一个问题。
你需要提供你的dockerfile以确保万无一失,但听起来好像有一个entrypoint
(aDocker入口点(不是 Traefik 入口点)在此处(或基础容器中)指定,这会导致traefik
容器启动时运行默认命令。因此,docker-composecommand
被作为参数传递给traefik
。
您可以在Traefik 文档他们提供的组合文件显示:
command: --api --docker
如您所见,这些是参数,而不是命令。并且它们(很可能)被传递给 traefik 命令。
我不确定您到底想要完成什么,但是为了在容器启动时运行这些脚本,您可能需要覆盖撰写文件中的入口点。