我在同一个网络上有两个容器(flask 应用程序)。就我而言,这两个容器可以通过 IP 地址进行通信,但是对于容器名称却无法正常工作。
我在文档中读到容器不仅可以通过 IP 地址进行通信,还可以将容器名称解析为 IP 地址。此功能称为自动服务发现。
我不明白我错过了什么。
感谢您的回复。
编辑:
我如何运行容器:
docker run -p 5001:5001 --net testnetwork --rm
docker run -p 5000:5000 --net testnetwork --rm
答案 0 :(得分:0)
如果你正在运行多个 docker 容器,我会推荐使用 docker-compose,因为默认情况下它们是在同一个网络中创建的,你可以使用你给它们的名字在它们之间进行通信。例如,假设您有一个 docker-compose 文件,如下所示
version: '3.1'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: database
MYSQL_USER: user
MYSQL_PASSWORD: password
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql
phpmyadmin:
image: phpmyadmin/phpmyadmin
environment:
PMA_HOST: db
PMA_PORT: 3306
PMA_ARBITRARY: 1
restart: always
ports:
- 8081:80
volumes:
db:
如果你启动它,你会发现你可以从 PhpMyAdmin 与 MySQL 通信,只需输入它的名称(“db”),不需要 IP。
关于使用 IP 的事情是,除非您手动分配它们,否则它们会发生变化,您可以在 Assign static IP to Docker container
中找到有关如何执行此操作的更多信息答案 1 :(得分:0)
基于没有通过容器名称进行通信的文档,它们必须被链接
<块引用>默认情况下,容器可以通过其 IP 地址进行通信。要按名称进行通信,必须将它们链接起来。
参考:https://docs.docker.com/engine/reference/commandline/run/
答案 2 :(得分:0)