无法通过docker-compose.yml

时间:2018-07-22 15:04:49

标签: docker docker-compose reverse-proxy traefik

Traefik只会忽略“标签”配置。

Traefik's main documentation page之后,我们可以简单地做到:

#docker-compose.yml

version: '3'

services:

  traefik:
    image: traefik # The official Traefik docker image
    command: --api --docker # Enables the web UI and tells Træfik to listen to docker
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - ./docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events

  whoami:
      image: emilevauge/whoami # A container that exposes an API to show its IP address
      labels:
        - "traefik.frontend.rule=Host:whoami.docker.localhost"

然后,运行docker-compose应该足够了(没有traefik.toml文件):

docker-compose up -d

产生预期的结果:

Starting test_traefik_1 ... done
Starting test_whoami_1  ... done

但不幸的是,Traefik的仪表板什么也不显示:

  

未找到提供者

我试图做什么:

  • 还要使用另一种labels表示法:
labels:
  traefik.backend: "whoami"
  traefik.frontend.rule: "Host:whoami.docker.localhost"
  • 关注this guide
  • 要删除“版本:'3'”,并将其更改为“版本:'3.3'”。
  • 要在Powershell上运行$env:DOCKER_HOST="npipe:////./pipe/docker_engine"$env:DOCKER_HOST="tcp://localhost:2375"
  • 要设置npipe而不是unix套接字:
volumes:
  - type: npipe
    source: ./pipe
    target: /pipe/docker_engine

什么都没有。

现在,我能在仪表板上看到某些内容的唯一方法是,将以下行添加到Traefik卷中:“-./traefik.toml:/traefik.toml”,同时使用[创建“ traefik.toml”文件文件]配置。我不想拥有这个文件。我想将控件包含在docker-compose.yml中的“标签”中。

也很高兴知道我何时应该使用traefik.toml文件,而不是在docker-compose.yml中设置标签。我没有看到任何信息。

编辑: traefik的docker日志显示正在使用UNIX套接字:

  

time =“ 2018-07-23T10:55:38Z” level = error msg =“无法检索   Docker客户端和服务器主机的信息:无法连接   Docker守护程序位于unix:///var/run/docker.sock。是docker守护程序   跑步吗?”

     

time =“ 2018-07-23T10:55:38Z” level = error msg =“ Provider   连接错误无法在以下位置连接到Docker守护程序   unix:///var/run/docker.sock。 docker守护程序是否正在运行?,重试   在13.276739006s”

由Docker组成should use npipe protocol on Windows by default,但事实并非如此。尝试显式设置Windows的管道,以代替UNIX套接字(using npipe of the long syntax):

#docker-compose.yml

version: '3.2'

services:

  traefik:
    image: traefik
    command: --api --docker
    ports:
      - "80:80"
      - "8080:8080"
    volumes:
      - type: npipe                # here we are
        source: ./pipe
        target: /pipe/docker_engine

但是日志仍然显示:

  

time =“ 2018-07-23T10:57:18Z” level = error msg =“提供商连接错误   无法通过unix:///var/run/docker.sock连接到Docker守护程序。是   docker daemon正在运行?,请在4.166259863s中重试”

     

time =“ 2018-07-23T10:57:23Z” level = error msg =“无法检索   Docker客户端和服务器主机的信息:无法连接   Docker守护程序位于unix:///var/run/docker.sock。是docker守护程序   跑步吗?”

2 个答案:

答案 0 :(得分:6)

可以使用:

volumes:
   - /var/run/docker.sock:/var/run/docker.sock

仅在Powershell中具有此解决方法:

$Env:COMPOSE_CONVERT_WINDOWS_PATHS=1

原因是此已打开的错误:https://github.com/docker/for-win/issues/1829 这使挂载docker.sock成为不可能,因为它“不是有效的Windows路径”(错误)。

答案 1 :(得分:1)

docker.sock文件位于linux环境中的/var/run/docker.sock中,而不是当前目录中。因此,在您的示例中,对于Linux环境,卷安装不正确。该撰写文件如下所示:

version: '3'

services:

  traefik:
    image: traefik # The official Traefik docker image
    command: --api --docker
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

  whoami:
      image: emilevauge/whoami 
      labels:
        - "traefik.frontend.rule=Host:whoami.docker.localhost"

由于您正在Windows上运行命令,因此可以via an npipe or tcp connection访问docker api。解决方案似乎是(这可能取决于Windows的docker版本):

version: '3'

services:

  traefik:
    image: traefik # The official Traefik docker image
    command: --api --docker --docker.endpoint=npipe:////./pipe/docker_engine
    ports:
      - "80:80"     # The HTTP port
      - "8080:8080" # The Web UI (enabled by --api)
    volumes:
      - //./pipe/docker_engine://./pipe/docker_engine

  whoami:
      image: emilevauge/whoami 
      labels:
        - "traefik.frontend.rule=Host:whoami.docker.localhost"