Два docker приложения на одном сервере
Есть два приложения на docker контейнерах.Запускаю оба приложения на 127.0.0.1 но на разных портах. Когда пытаюсь с помощью curl обратиться из одного приложения в другое (например из 127.0.0.1:80 в 127.0.0.1:81) то обращение не происходит. Подскажите пожалуйста, как мне поднять два приложения на одном сервере, чтобы они могли обмениваться данными? Может есть какие-то ограничения у localhost? docker-compose файл одного из приложений (у другого приложения все аналогично кроме порта):
services:
nginx:
image: nginx:latest
ports:
- 127.0.0.1:81:80
volumes:
- .:/var/www/html
- ./docker/config/nginx:/etc/nginx/conf.d
- ./docker/logs/nginx:/var/log/nginx
links:
- php-fpm
php-fpm:
build:
context: ./docker/php-fpm
volumes:
- .:/var/www/html
Ответы (3 шт):
два контейнера это 2 виртуальные машины, а это в свою очередь значит они изолированы. в каждом контейнере localhost свой, а не вашей машины на котором запущен DockerHub. Так что советую настраивать приложения с учетом они расположены на разных машинах со всеми IP и именами.
Вы можете или построить общую сеть, настроив сетки и ip адреса.
Либо сделать общую сеть между двумя проектами: https://stackoverflow.com/questions/38088279/communication-between-multiple-docker-compose-projects
Еще можно настроить только одну сеть у одного приложения (с которого будут идти запросы). Адрес хоста будет маска сети с едицой в кноце. И сможете обращаться к своему севрису по его порту на хосте, через iphost:port
Очень рекомендую почитать, как докер строит сети и как с ним можно работать. Если совсем по харду то вот примерчик
- для начала создаете подсеть:
docker network create --subnet 172.10.0.0/16 custom_net
- далее одно из приложений
version: '3'
services:
nginx:
image: nginx:latest
ports:
- 80:80
networks:
default:
ipv4_address: 172.10.0.102
php-fpm:
image: php:7.2-fpm
extra_hosts:
- "nginx.app2:172.10.0.102"
- "nginx.app1:172.10.0.101"
networks:
default:
external:
name: custom_net
- далее другое приложение:
version: '3'
services:
nginx:
image: nginx:latest
ports:
- 81:80
networks:
default:
ipv4_address: 172.10.0.101
php-fpm:
image: php:7.2-fpm
extra_hosts:
- "nginx.app2:172.10.0.102"
- "nginx.app1:172.10.0.101"
networks:
default:
external:
name: custom_net
Как видно разница лишь в портах, которые контейнеры nginx отдают наружу и в присвоении статических ip для nginx. Теперь можно попробовать войти в какой-либо из контейнеров php и выполнить
curl http://nginx.app1
curl http://nginx.app2
NOTE: в примере nginx не смотрит на php! т.е. в ответе curl будет просто страница приветствия nginx.