Traefik docker image在Windows上不起作用,但在MacOS上起作用?

pup*_*eno 9 docker traefik

我有一个由在MacOS上开发的几个Docker映像组成的应用程序,我正在尝试使其在Windows上启动。大部分似乎都在工作,但是有一个Traefik负载均衡器却没有。

在MacOS上它可以正常工作,但是在Windows上,无论我访问哪个URL,它都会给我一个404,即“未找到404页面”的实际内容。

Traefik配置如下所示:

logLevel = "INFO"
defaultEntryPoints = ["http", "https"]
[entryPoints]
  [entryPoints.http]
   address = ":80"
  [entryPoints.https]
   address = ":443"
    [entryPoints.https.tls]
    [entryPoints.https.tls.defaultCertificate]
      certFile = "/certs/cert.pem"
      keyFile = "/certs/cert.pem"
# Connection to docker host system (docker.sock)
[docker]
watch = true
domain = "localhost"
[file]
 [backends]
  [backends.backend-mixpanel]
     [backends.backend-mixpanel.servers]
      [backends.backend-mixpanel.servers.mixpanel]
        url = "https://api.mixpanel.com"
        weight = 10
  [backends.backend-yieldify]
     [backends.backend-yieldify.servers]
      [backends.backend-yieldify.servers.yieldify]
        url = "https://td.yieldify.com/"
        weight = 0
 [frontends]
     [frontends.frontend-mixpanel]
       backend = "backend-mixpanel"
      [frontends.frontend-mixpanel.routes.one]
        rule = "HostRegexp:localhost,{catchall:.*};Path:/mixpanel/{.*};PathPrefixStripRegex:/{mixpanel}"
        priority=10
     [frontends.frontend-yieldify]
       backend = "backend-yieldify"
      [frontends.frontend-yieldify.routes.two]
        rule = "HostRegexp:localhost,{catchall:.*};Path:/yieldify/{.*}"
        priority=0
Run Code Online (Sandbox Code Playgroud)

尽管Dockerfile包含:

FROM traefik:alpine

RUN apk add --update openssl

RUN mkdir -p /certs

RUN openssl req -x509 -newkey rsa:2048 -keyout key.pem -out ca.pem -days 1080 -nodes -subj '/C=UK/ST=London/L=London/O=ProjectX/OU=Engineering team/CN=local.wif'

RUN cat key.pem ca.pem > /certs/cert.pem
Run Code Online (Sandbox Code Playgroud)

相关的docker-compose.yml部分包含:

  lb:
    image: load-balancer
    build: ${WORKSPACE}/go-home/load_balancer
    ports:
    - 80:80
    - 443:443
    links:
    - wifi-ui-dev
    - wifi-ui-prod
    - portal
    - wifi-api
    env_file:
    - .env
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock:ro,delegated
    - ${PWD}/load_balancer/traefik.toml:/etc/traefik/traefik.toml:ro,delegated
Run Code Online (Sandbox Code Playgroud)

当我收到404时,没有任何内容发送到该Docker映像的控制台(stdout和stderr)。

有什么想法在发生什么或者如何接近它不起作用的原因吗?

我最担心的问题之一是套接字的数量:

- /var/run/docker.sock:/var/run/docker.sock:ro,delegated
Run Code Online (Sandbox Code Playgroud)

检查正在运行的容器,该文件看起来像一个套接字:

/ # ls -laF /var/run/docker.sock
srw-rw----    1 root     root             0 Sep  2 11:04 /var/run/docker.sock=
Run Code Online (Sandbox Code Playgroud)

以防万一,我尝试用以下方式替换该行:

- //./pipe/docker_engine:/var/run/docker.sock
Run Code Online (Sandbox Code Playgroud)

或搭配:

- type: npipe
  source: ////./pipe/docker_engine
  target: /var/run/docker.sock
  consistency: delegated
Run Code Online (Sandbox Code Playgroud)

两者都导致套接字看起来像一个目录:

/ # ls -laF /var/run/docker.sock
total 4
drwxr-xr-x    2 root     root            40 Sep  3 14:52 ./
drwxr-xr-x    1 root     root          4096 Sep  3 14:57 ../
Run Code Online (Sandbox Code Playgroud)

Elg*_*yed 0

要在 Windows 上运行基于 Linux 的 docker 映像,需要满足一些要求: Windows 10 Pro 或更高版本,并启用 Hyper-V 支持。

\n\n

您还需要安装 \xe2\x80\x9cDocker for Windows.exe\xe2\x80\x9d,这是一个管理器应用程序,用于设置名为:MobyLinuxVM 的 \xe2\x80\x9cHyper-V VM\xe2\x80\x9d,其中包含一个最小的 Linux 系统,能够运行 docker 容器。\n希望有帮助!

\n