gpt4 book ai didi

Docker 容器不能通过 localhost 访问,但可以通过 127.0.0.1 访问

转载 作者:行者123 更新时间:2023-12-02 18:07:23 33 4
gpt4 key购买 nike

问题

我有一个暴露给 *:8080 的 Docker 服务容器.

  • 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。
  • 但是如果我使用任何其他本地IP,我就可以访问容器,例如127.0.0.1

  • 这让我绊倒了,因为在我的 hosts 中文件, localhost重定向到 127.0.0.1 .

    为什么会这样?它是否以某种方式与 IPv4/IPv6 双栈相关?

    环境

    我在 PopOS(基于 Ubuntu)上,启用了 Docker Swarm。
    我正在使用这个测试堆栈文件, traefik.docker-compose.yml :
    version: '3'
    services:
    reverse-proxy:
    image: traefik # The official Traefik docker image
    command: --api --docker # Enables the web UI and tells Traefik to listen to docker
    ports:
    - "80:80" # The HTTP port
    - "8080:8080" # The Web UI (enabled by --api)
    volumes:
    - /var/run/docker.sock:/var/run/docker.sock # So that Traefik can listen to the Docker events

    要运行堆栈,我使用:
    docker stack deploy -c traefik.docker-compose.yml traefik

    一旦服务启动,我确认它正在监听 8080通过2种方式:
  • docker service ls
  • ID                  NAME                    MODE                REPLICAS            IMAGE               PORTS
    4ejfsvenij3p traefik_reverse-proxy replicated 1/1 traefik:latest *:80->80/tcp, *:8080->8080/tcp
  • sudo ss -pnlt | grep 8080
  • LISTEN   3         128                       *:8080                   *:*        users:(("dockerd",pid=2119,fd=45))

    供引用,这里是我 /etc/hosts的内容:
    127.0.0.1   localhost
    ::1 localhost ipv6-localhost
    127.0.1.1 pop-os.localdomain pop-os pop1810x220

    我只是用 curl对于测试:
  • 作品:curl http://127.0.0.1:8080
  • 挂断:curl http://localhost:8080
  • 最佳答案

    尝试在正在运行的容器中编辑/etc/hosts 以删除第二行中的第二个“localhost”引用,并在“::1”之后跟随几个空格,使其显示为:
    ::1 ipv6-本地主机

    关于Docker 容器不能通过 localhost 访问,但可以通过 127.0.0.1 访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54857972/

    33 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com