我对Docker网络了解不多,其中有2个不同的容器,而它们分别放置在两台不同的计算机上。在这种情况下,我有两个树莓派,其中一个是服务器,另一个是客户端。
两者都使用CoAP协议来交换消息。无论如何,客户端需要服务器的ip作为客户端脚本的参数,例如-
python src/client.py <server_ip>
我检查了服务器容器,并将私有IP取为-
172.18.0.2
以下是用于服务器和客户端的docker-compose文件-
docker-compose.yml(服务器)
version: '3'
services:
server:
build: ./
image: img_server:v1
ports:
- 5683:5683/udp
volumes:
- ./:/usr/app
command: ["python", "src/server.py"]
docker-compose.yml(客户端)
version: '3'
services:
client:
build: ./
image: img_client:v1
environment:
SERVER_IP: "127.0.0.1"
ports:
- 61616:61616/udp
volumes:
- ./:/usr/app
command: ["sh", "-c", "python src/client.py $SERVER_IP"]
由于容器(服务器和客户端)在不同的计算机上运行,因此我无法建立连接。
问题:是否可以在服务器和客户端之间建立连接,而这两者都放置在单独的docker守护程序(单独的计算机)中?如果是这样,那我该怎么办?
答案 0 :(得分:1)
这与服务未在Docker中运行完全相同:使用运行该服务的物理主机的IP地址配置客户端。 (确保您已经发布了适当的ports:
,以便可以访问它们。)
永远不要docker inspect
容器来找到其IP地址。在很多情况下(包括这种情况),该地址是完全没有用的,并且总是有一种到达容器的更好方法。
答案 1 :(得分:1)
有2种基本方法。
首先-像不使用dockerized应用程序一样工作。公开docker-compose
文件中的端口,并指定要连接的主机机器的IP /主机名(注意-在这种情况下,您不使用容器的IP-公开了主机可用的端口之后)。
第二-推荐-使用docker的overlay
网络将您的容器全部连接在一起。与bridge
模式不同,overlay
允许在不同的docker守护程序之间进行连接。这种方法更好,因为它可以将容器与主机隔离。重叠式网络要求您创建docker swarm
并将容器连接到它。
快警:https://docs.docker.com/network/network-tutorial-overlay/#walkthrough