我的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 访问时,它仍然无法工作
我在做什么错了?
答案 0 :(得分:0)
Docker内部IP地址仅可用于一种非常特定的主机/操作系统配置;您不应该尝试直接访问它们,几乎不需要在配置中指定它们。 (实际上,您可以删除所有Compose provides reasonable defaults for you个networks:
块。)
自发布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
)。