#docker #docker-compose #dockerfile
Вопрос:
Я довольно новичок в докере, и докер сочиняет. У меня есть простой сценарий, основанный на трех приложениях (app1, app2, app3), которые я хочу подключить к сети своего хоста. Цель состоит в том, чтобы иметь подключение к Интернету также внутри контейнера.
Вот мой файл docker-compose:
version: '3.9'
services:
app1container:
image: app1img
build: ./app1
networks:
network_comp:
ipv4_address: 192.168.1.1
extra_hosts:
anotherpc: 192.168.1.44
ports:
- 80:80
- 8080:8080
app2container:
depends_on:
- "app1container"
image: app2img
build: ./app2
networks:
network_comp:
ipv4_address: 192.168.1.2
ports:
- 3100:3100
app3container:
depends_on:
- "app1container"
image: app3img
build: ./app3
networks:
network_comp:
ipv4_address: 192.168.1.3
ports:
- 9080:9080
networks:
network_comp:
driver: ""
ipam:
driver: ""
config:
- subnet: 192.168.0.0/24
gateway: 192.168.1.254
Я уже читал документацию docker-compose, в которой говорится, что для ОС Windows нет драйвера моста. Есть ли в любом случае решение этой проблемы?
Комментарии:
1. Обычно вы не даете отдельным процессам в физической системе их собственные IP-адреса, работающие в контейнерах или иным образом. Вы должны иметь возможность использовать IP-адрес хост-системы и первый опубликованный
ports:
номер для доступа к контейнерам. Указание внутренних IP-адресов Docker, которые конфликтуют с внешней сетью, может вызвать проблемы, и вы можете удалить всеnetworks:
блоки во всем файле.2. Большое спасибо! Это сработало!
Ответ №1:
Обычно вам не нужно выполнять какие-либо специальные настройки, чтобы это работало. Когда у вашей службы создания есть ports:
, это делает порт доступным на IP-адресе хоста. Основными правилами для этого являются:
- Служба внутри контейнера должна прослушивать специальный адрес 0.0.0.0 «все интерфейсы» (а не 127.0.0.1 «только этот контейнер») на каком-либо (обычно фиксированном) порту.
- Контейнер должен быть запущен с помощью Compose
ports:
(илиdocker run -p
). Вы выбираете первый номер порта, второй номер порта должен соответствовать порту внутри контейнера. - Служба может быть доступна через IP-адрес хоста по первому номеру порта (или, если вы используете более старую настройку Docker Toolbox, по
docker-machine ip
адресу).
http://host.example.com:12345 (from other hosts)
|
v
ports: ['12345:8080'] (in the `docker-compose.yml`)
|
v
./my_server -bind 0.0.0.0:8080 (the main container command)
Вы можете удалить всю ручную networks:
конфигурацию в этом файле. В частности, это проблематично, если вы попытаетесь указать, чтобы сеть Docker имела тот же диапазон IP-адресов, что и сеть хоста, поскольку это две отдельные сети. Compose автоматически предоставляет сеть с именем default
, которая должна работать для большинства практических приложений.