docker - 如何从另一个都在不同机器上运行的容器访问一个容器?

标签 docker networking docker-compose docker-container

我对 docker 网络了解不多,我有 2 个不同的容器,而它们被放置在两台不同的机器上。在这种情况下,我有 两个树莓派 其中一个是 服务器 另一个是 客户 .

两者都使用 CoAP 协议(protocol)来交换消息。无论如何,客户端需要服务器的 ip 作为客户端脚本的参数,例如 --

python src/client.py <server_ip> 

我检查了服务器容器并获得了私有(private) 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 守护程序(单独的机器)中?如果是这样,那么我该怎么做?

最佳答案

就像服务没有在 Docker 中运行一样:使用运行服务的物理主机的 IP 地址配置客户端。 (确保您已发布适当的 ports:,以便他们可以访问。)

你不应该docker inspect一个容器来查找它的 IP 地址。有很多常见的情况,包括这个,地址是完全没用的,总有更好的方法可以到达容器。

关于docker - 如何从另一个都在不同机器上运行的容器访问一个容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54109966/

相关文章:

具有多个基础镜像的 Dockerfile

docker - 在 docker-compose 中获取凭证规范 (gMSA) 时出现问题

java - HTTPUrlConnection 为 Linux 返回 400 但适用于 Windows

c++ - 拆分 Netfilter 数据包

azure - 运行多容器应用程序时,适用于容器的 Azure Web App 是否支持 ssh 访问?

Docker:如何在纯数据容器中设置文件所有权?

database - docker 在没有主机卷的情况下运行本地脚本

networking - 数据链路层和传输层

sql-server - 为什么无法将我的 .net 核心容器连接到 SQL Server docker 容器?

docker swarm compose placement constraints bool 值或条件