从外部/浏览器访问Docker容器

时间:2020-02-15 10:34:09

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

我的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 访问时,它仍然无法工作

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

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

自发布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)。