关于码头工人间的沟通。
鉴于--link
标志已弃用(我读过),首选方法是创建新网络,如:
docker network create my_network
然后用--network my_network
创建两个容器,即:
docker run --name container1 --network my_network -d iamsecret -p 1234:1234
docker run --name container2 --network my_network -d iamawebserver -p 80:80
我如何实现:
172.16.23.0
; container1
为172.16.23.2
,container2
为172.16.23.3
。container1
与container2
进行对话(就像它是数据库一样)container2
与container1
通话,但同时可以通过我的电脑访问(例如,如果它是网络服务器)。由于
答案 0 :(得分:0)
嗯,我找到了一种方法,但我确信有一种更简单,更优雅的方式。积分转至http://www.dasblinkenlichten.com/docker-networking-101/
#start containers attached to bridge default network, both open at this point
docker run --name container1 --network bridge ...
docker run --name container2 --network bridge ...
# create new internal network with my ips
docker network create --internal --driver=bridge --subnet=172.16.23.0/24 --gateway=172.16.23.1 mynet
# disconnect secret host from public bridge
docker network disconnect bridge container1
# connect containers to secret network with my chosen ips
docker network connect --ip 172.16.23.2 mynet container1
docker network connect --ip 172.16.23.3 mynet container2
如果您认为有更好的方法或上面的错误,请添加您的答案! 感谢
答案 1 :(得分:0)
使用docker-compose可能更容易。
您需要一个docker-compose.yml文件(参见下面的示例),它将按照上一节创建网络,按照前两个部分构建映像,将容器端口映射到网络端口,然后附加容器到网络。
version: '3'
services:
container1:
image: container1
build:
context: ./
dockerfile: Dockerfile
ports:
- "5100:80"
depends_on:
- container2
networks:
mynetwork:
ipv4_address: 172.16.1.10
container2:
image: container2
build:
context: ./container2
dockerfile: ./Dockerfile
ports:
- "5200:80"
networks:
mynetwork:
ipv4_address: 172.16.1.20
networks:
mynetwork:
driver: bridge
ipam:
driver: default
config:
-
subnet: 172.16.1.0/24
-
subnet: 2001:3984:3989::/64
设置好docker-compose文件后,运行它:
docker-compose up
将其删除:
docker-compose down
强制它重建图像(如果在使用现有图像之前构建):
docker-compose up --build