Что касается взаимодействия докеров.
Учитывая, что флаг --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
(как будто это был db)container2
разговаривать с container1
, но в то же время быть доступным для моего компьютера (как если бы это был веб-сервер).Спасибо
Что ж, я нашел способ, но уверен, что есть более простой и элегантный способ. Кредиты переходят на 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
Пожалуйста, добавьте свой ответ, если вы считаете, что есть способ лучше или что-то выше не так! Спасибо
Может быть проще использовать 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
Я помню, как год назад задавал нечто подобное ... Мне так и не ответили: docker - конфигурация сети для изоляции двух контейнеров