Два 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 шт):

Автор решения: Aziz Umarov

два контейнера это 2 виртуальные машины, а это в свою очередь значит они изолированы. в каждом контейнере localhost свой, а не вашей машины на котором запущен DockerHub. Так что советую настраивать приложения с учетом они расположены на разных машинах со всеми IP и именами.

→ Ссылка
Автор решения: Pavel

Вы можете или построить общую сеть, настроив сетки и ip адреса.

Либо сделать общую сеть между двумя проектами: https://stackoverflow.com/questions/38088279/communication-between-multiple-docker-compose-projects

Еще можно настроить только одну сеть у одного приложения (с которого будут идти запросы). Адрес хоста будет маска сети с едицой в кноце. И сможете обращаться к своему севрису по его порту на хосте, через iphost:port

→ Ссылка
Автор решения: Денис Нестерюк

Очень рекомендую почитать, как докер строит сети и как с ним можно работать. Если совсем по харду то вот примерчик

  1. для начала создаете подсеть:
docker network create --subnet 172.10.0.0/16 custom_net
  1. далее одно из приложений
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
  1. далее другое приложение:
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.

→ Ссылка