在 WSL2 中,“'/bin/sh' 不是 Traefik 命令:假设 shell 执行。”

在 WSL2 中,“'/bin/sh' 不是 Traefik 命令:假设 shell 执行。”
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 命令。

我不确定您到底想要完成什么,但是为了在容器启动时运行这些脚本,您可能需要覆盖撰写文件中的入口点。

相关内容