在Docker中使用“curl”到whoami与traefik连接时被拒绝,有人知道如何解决吗?

iqjalb3h  于 2023-03-07  发布在  Docker
关注(0)|答案(3)|浏览(319)
    • 更新**

当我对被拒绝的服务sudo docker ps --no-trunced SERVICE_NAME运行该命令时,我得到以下信息:
network sandbox join failed: subnet sandbox join failed for "10.0.2.0/24": error creating vxlan interface: operation not supported.
我从网上查到这是一个内核问题,但是我的内核版本已经是5.15了,对于arm64来说是最新的,有什么替代品吗?
我是相当新的docker,最近我想设置一个traefik容器代理所有容器内的docker,使TLS可以使用。
我学习了Basic Traefik configuration tutorial上的教程
这是我的Docker合成文件:

version: "3.7"

services:
  traefik:
    image: traefik:v2.6
    command:
      # Entrypoints configuration
      - --entrypoints.web.address=:80
      # Docker provider configuration
      - --providers.docker=true
      # Makes sure that services have to explicitly direct Traefik to expose them
      - --providers.docker.exposedbydefault=false
      # Default docker network to use for connections to all containers
      - --providers.docker.network=bridge
      # Logging levels are DEBUG, PANIC, FATAL, ERROR, WARN, and INFO.
      - --log.level=info
    ports:
      - 80:80
    networks:
      - bridge
    restart: unless-stopped

  # https://github.com/traefik/whoami
  whoami:
    image: traefik/whoami:v1.7.1
    labels:
      # Explicitly instruct Traefik to expose this service
      - traefik.enable=true
      # Router configuration
      ## Listen to the `web` entrypoint
      - traefik.http.routers.whoami_route.entrypoints=web
      ## Rule based on the Host of the request
      - traefik.http.routers.whoami_route.rule=Host(`whoami.MY_DOMAIN.com`)
      - traefik.http.routers.whoami_route.service=whoami_service
      # Service configuration
      ## 80 is the port that the whoami container is listening to
      - traefik.http.services.whoami_service.loadbalancer.server.port=80
    networks:
      - bridge

networks:
  bridge:
    external:
      name: bridge

最初我使用driver: overlay的网络,这似乎是swarm的要求,但它不起作用,所以我恢复到bridge
我没有按照教程使用套接字代理来降低复杂性,而且traefik实验室的用户指南也没有使用套接字代理,所以我想这是可以的。
在Portainer 2.14.2上成功部署了堆栈之后,我在终端上键入了以下命令:curl http://whoami.MY_DOMAIN.com,此域已在其中注册,则结果为:curl: (7) Failed to connect to whoami.MY_DOMAIN.com port 80 after 8 ms: Connection refused.
并且portainer界面还显示:

由于某些未知原因,日志不可用,从portainer界面看,whoami似乎正在运行,但traefik似乎离线,或拒绝所有连接。
有谁知道我为什么和如何解决这个问题吗?提前非常感谢!
还有一件事,底层系统:

OS: Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-1013-raspi aarch64)
Device: Raspberry Pi 4B
CPU architecture: Aarch64
RAM: 4GB
1cklez4t

1cklez4t1#

Traefik需要访问Docker守护进程(在主机上运行),以便监视container的启动或停止。
在教程中,您(部分地)遵循了通过为traefik容器提供到套接字代理的链接来实现链接的方法,由于您忽略了这一部分,现在Traefik无法与docker对话。
从教程中:

--providers.docker.endpoint=tcp://socket_proxy:2375

Instead of connecting directly to unix:///var/run/docker.sock we are going to use the socket_proxy container to be able to query the Docker endpoint as a security precaution.

如果不喜欢代理解决方案(实际上还不错),可以使用安全性较低的选项,将主机/var/run/docker.sockMap到容器内的同一路径。

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

您还可以在官方文档中看到这方面的示例

lp0sw83n

lp0sw83n2#

对于我刚才提到的堆栈服务被拒绝或无法启动的问题:
network sandbox join failed: subnet sandbox join failed for "10.0.2.0/24": error creating vxlan interface: operation not supported
我能够让它工作后,应用以下修复:
1.使用modprobe vxlan检查内核中是否存在vxlan驱动程序
1.如果vxlan不存在(这是Raspberry Pi上Ubuntu的常见情况),请详细了解Mail archive
1.从这个邮件归档中,他们认为一个名为linux-modules-extra-raspi的软件包包含了Raspberry Pi上Ubuntu所有缺失的模块。
1.使用sudo aptitude install linux-modules-extra-raspi -y安装此软件包
1.逐个modprobe vxlan插入驱动程序vxlan(我不知道是否需要此步骤,如果不正确,请更正)

kq0g1dla

kq0g1dla3#

在主机上安装Linux kernel extra modules for version 5.15.0 on ARMv8 SMP为我解决了network sandbox join failed错误(RPi3B,Ubuntu Server 22.04):

sudo apt install linux-modules-extra-raspi

灵感源自this

相关问题