Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在两个docker容器之间通信_Docker - Fatal编程技术网

在两个docker容器之间通信

在两个docker容器之间通信,docker,Docker,我是docker的新手,我需要你在容器之间的通信方面的帮助 我有两个容器 容器1:它是一个网站,在端口80上运行 容器2:它是上述网站的web API,在端口8000上运行 我在我的树莓皮上安装了两个容器。我的RPi主机名是raspberrypi 我用--net=host创建了两个容器,所以在我的网站中,我可以通过 但是RPi的主机名可以更改,并且我不能用新的API URL(例如:http//new\u host\u name:8000/dosomething)重新创建网站容器,所以我的问题是

我是docker的新手,我需要你在容器之间的通信方面的帮助

我有两个容器 容器1:它是一个网站,在端口80上运行 容器2:它是上述网站的web API,在端口8000上运行

我在我的树莓皮上安装了两个容器。我的RPi主机名是raspberrypi 我用--net=host创建了两个容器,所以在我的网站中,我可以通过

但是RPi的主机名可以更改,并且我不能用新的API URL(例如:http//new\u host\u name:8000/dosomething)重新创建网站容器,所以我的问题是

有没有办法将主机名分配给一个容器,以便我可以在其他容器中使用它? 例如: 容器2使用“my_服务”作为其主机名,因此在容器1中,我可以使用“http//my_服务:8000/dosomething”。我的客户可以更改他们的RPI主机名,我不需要更新代码


谢谢,祝您度过愉快的一天。

假设您使用以下命令运行第一个容器:

docker run -d --name my_service web_api_image
因此,您可以使用
--link
标志运行第二个:

docker run -d -P --name web --link my_service:my_service website_image
然后,在网站容器中,您可以使用my_服务主机名引用web api

请注意:
--link
已关闭

您还可以使用
docker compose

version: "2"
services:
  web_api:
    image: web_api_image
    container_name: web_api
    ports:
      - "8000:8000"
    expose:
      - "8000"
  website:
    image: website_image
    container_name: website
    ports:
      - "80:80"
    links:
      - "web_api:web_api"

替换图像名称并使用
docker compose up运行

您可以使用
docker compose
,因为默认情况下,同一个compose文件中的所有容器都位于同一网络中,并且可以使用其服务名称相互调用

但是,如果您使用的是
docker run
,则可以使用
-h
标志指定主机名。示例:
docker run-h test.Example.com-it ubuntu/bin/bash


我建议你调查一下docker compose的情况。更进一步,您和您的客户都可以使用变量来指定变量的值。

这是如何使用docker中的桥接驱动程序网络在两个容器之间进行通信

.NETCore2.2中的github示例是


谢谢但当我使用--link时,它会显示一条错误消息“docker:error response from daemon:conflicting options:host type networking不能与链接一起使用。这将导致未定义的行为。”。也许,我使用--net=host。无论如何,你能给我一个关于docker compose的例子吗?不要使用
--net
标志。确保已移除所有容器
docker ps-a
。如果你更喜欢docker compose,我会编辑答案。@Doraemon那么,你能接受/支持我的答案吗?
version: '3.4'

services:
eventstoresample: 
  image: eventstoresample
  build:
    context: .
    dockerfile: EventStoreSample/Dockerfile
  networks:
    clusternetwork:
      ipv4_address: 172.16.0.12

eventstore: 
image: eventstore/eventstore
environment:
  - EVENTSTORE_INT_IP=172.16.0.13
  - EVENTSTORE_EXT_HTTP_PORT=2113
  - EVENTSTORE_EXT_TCP_PORT=1113
  - EVENTSTORE_EXT_HTTP_PREFIXES=http://*:2113/
ports:
  - "1113:1113"
  - "2113:2113"
networks:
  clusternetwork:
    ipv4_address: 172.16.0.13

networks:
  clusternetwork:
  driver: bridge
  ipam:
    driver: default
    config:
      - subnet: 172.16.0.0/24