Docker compose 带traefik v2的portainer docker compose给出;失败:无法检索服务器设置和状态“;

Docker compose 带traefik v2的portainer docker compose给出;失败:无法检索服务器设置和状态“;,docker-compose,traefik,portainer,Docker Compose,Traefik,Portainer,我目前很难将traefik v1容器更新为v2。我设置了一个带有自动http->https转发的traefik容器。现在,我想让portainer运行以下docker compose文件: version: '3.3' volumes: portainer: {} networks: web: external: true services: portainer: image: portainer/portainer:latest restart: alway

我目前很难将traefik v1容器更新为v2。我设置了一个带有自动http->https转发的traefik容器。现在,我想让portainer运行以下docker compose文件:

version: '3.3'
volumes:
  portainer: {}
networks:
  web:
    external: true
services:
  portainer:
    image: portainer/portainer:latest
    restart: always
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    command: |
      --no-analytics
      --data /data
      --admin-password "the_hashed_password"
      -H unix:///var/run/docker.sock
    networks:
      web:
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.portainer.entrypoints=websecure"
      - "traefik.http.routers.portainer.rule=Host(`portainer.myserver.domain`)"
      - "traefik.http.services.portainer.loadbalancer.server.port=9000"
      - "traefik.http.routers.portainer.tls=true"
      - "traefik.http.routers.portainer.tls.certresolver=leresolver"
      - "traefik.http.routers.portainer.middlewares=authportainer"
      # generate with: sudo docker run --rm -ti xmartlabs/htpasswd user password
      - "traefik.http.middlewares.authportainer.basicauth.users=myuser:my_hashed_password"
现在,当我用
docker compose up
启动容器时,我得到:

portainer_1  | 2020/04/19 16:10:04 Starting Portainer 1.23.2 on :9000
...
portainer_1  | 2020/04/19 16:10:04 server: Listening on 0.0.0.0:8000...
访问
http://portainer.myserver.domain
正确地转发到
https://portainer.myserver.domain
。 使用
myuser
进行身份验证后,将显示一个空页面,并显示一条淡入淡出的消息“Failure.cannot retrieve server settings and status”。使用traefik v1时,该设置可以正常工作。我不明白的是我是否需要对端口8000做任何事情(在旧的工作环境中我没有这样做)

如何调试这样的场景?
我的docker compose文件有什么问题?


另外,为了简洁起见,我省略了traefik配置文件。如果需要,我会添加它(它适用于简单的容器)。

我遇到了类似的问题,可以通过扩展路由器规则来解决它(另请参见):

这样,Traefik现在应该正确路由Portainer前端的api请求

希望这对你也有帮助


另外,关于您的调试问题,我通过检查浏览器的网络交互发现了这个问题,这表明对
portainer.myserver.domain/api/xyz
的所有调用都返回了404错误。

我遇到了类似的问题,可以通过扩展路由器规则来解决它(另请参见)

这样,Traefik现在应该正确路由Portainer前端的api请求

希望这对你也有帮助


另外,关于您的调试问题,我通过浏览器检查网络交互来解决这个问题,这表明对
portainer.myserver.domain/api/xyz
的所有调用都返回了404错误。

经过太多的时间,我解决了两个问题:

  • 浏览器在此出现故障
  • (这是一个无关的,但在调试过程中发生在我身上)
  • 关于浏览器——我使用Firefox 78.0.1,并且总是在一台特定的机器上使用docker。似乎缓存了一些不应该缓存的数据,缓存导致出现错误的页面。我不知道portainer是否在浏览器缓存中存储了一些数据(比如cookies),但是让它忘记站点()让portainer正常工作。请注意,按
    F5
    Shift+F5
    在此处不起作用,重新启动浏览器也不起作用


    如果遇到类似问题,也可以在专用窗口中加载页面。根据浏览器的配置,这将阻止它使用以前缓存的数据。

    经过太多的时间后,我发现了两件事:

  • 浏览器在此出现故障
  • (这是一个无关的,但在调试过程中发生在我身上)
  • 关于浏览器——我使用Firefox 78.0.1,并且总是在一台特定的机器上使用docker。似乎缓存了一些不应该缓存的数据,缓存导致出现错误的页面。我不知道portainer是否在浏览器缓存中存储了一些数据(比如cookies),但是让它忘记站点()让portainer正常工作。请注意,按
    F5
    Shift+F5
    在此处不起作用,重新启动浏览器也不起作用


    如果遇到类似问题,也可以在专用窗口中加载页面。根据浏览器的配置,这将阻止浏览器使用以前缓存的数据。

    浏览器中的“网络”选项卡确实是一个不错的选择。我稍后会试试你的建议,如果它能解决问题,我会投赞成票。谢谢你的提示。浏览器中的“网络”选项卡确实是一个很好的观点。我稍后会试试你的建议,如果它能解决问题,我会投赞成票。谢谢你的提示。
    - "traefik.http.routers.portainer.rule=Host(`portainer.myserver.domain`) || (Host(`portainer.myserver.domain`) && PathPrefix(`/api`))"