【问题标题】:Accessing Docker container from outside/browser从外部/浏览器访问 Docker 容器
【发布时间】:2020-02-15 10:34:09
【问题描述】:

我的 Docker Compose 配置:


version: "3"
services:
  django1:
    build: .
    command: "python ./test1/manage.py runserver"
    ports:
      - "8006:8000"
    expose:
      - "8006"
    networks:
      main_network:
        ipv4_address: 20.20.0.3
  django2:
    build: .
    command: "python ./test2/manage.py runserver"
    ports:
      - "8007:8000"
    expose:
      - "8007"
    networks:
      main_network:
        ipv4_address: 20.20.0.2

networks:
  main_network:
    driver: bridge
    ipam:
      config:
        - subnet: 20.20.0.0/24

这是我从外部访问 Docker 的命令

docker run --name testname -p 8077:8007 my_image_name

但是当我从浏览器 20.20.0.2:8077 访问时仍然无法正常工作

我做错了什么?

【问题讨论】:

  • 可以通过localhost:8077访问吗?
  • 不,我不能。我检查了它。但它没有工作

标签: python python-3.x docker docker-compose


【解决方案1】:

Docker 内部 IP 地址仅适用于一个非常特定的主机/操作系统配置;您不应该尝试直接访问它们,并且几乎不需要在配置中指定它们。 (实际上,您可以删除所有 networks: 块,Compose provides reasonable defaults for you。)

由于您发布了ports:,您可以使用您的主机的 IP 地址和发布的(第一个)端口号。如果您的浏览器和 Docker 位于同一主机上,那么 localhost 也可以在这里工作 (http://localhost:8077),除非您使用的是 Docker Toolbox,在这种情况下您需要 docker-machine ip 地址(通常是 192.168.99.100)。

如果您完全可以访问容器专用 IP 地址(您的浏览器和 Docker 位于同一本机 Linux 主机上,并且您没有运行更复杂的 Docker-in-Docker 或基于 VM 的设置),那么您需要容器内的端口号,ports: 中的第二个数字。这也适用于容器到容器的通信,其中 Compose 服务名称应用作主机名(django1 可以调用 http://django2:8000)。

【讨论】:

  • 我删除了所有networks 块,并尝试了localhost:8077。它再次没有工作。但是,我没有使用docker run --name testname -p 8077:8007 my_image_name 它在我写localhost:expose_port 时起作用。部署项目后,我可以到达 Docker Container 吗?
猜你喜欢
  • 1970-01-01
  • 2019-05-04
  • 2014-06-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-03
  • 1970-01-01
  • 2022-12-04
相关资源
最近更新 更多