Как организовать три контейнера с помощью docker-compose, чтобы приложения взаимодействовали между собой, используя имя контейнера?

У меня есть три образа (todofront, todoback и todotests), и я использую docker-compose для организации этих образов путем создания контейнеров.

Docker-составьте:

      version: '3'

services:
  todotests:
    image: todotests
    container_name: todotests
    environment: 
      - FRONT_HOST=todofront
    restart: always
    depends_on:
      - todoback
      - todofront

  todofront:
    image: todofrontend
    container_name: todofront
    ports:
      - 3000:3000
    environment:
      - REACT_APP_API_HOST=todoback
    restart: always
    depends_on:
      - todoback

  todoback:
    image: todobackend
    container_name: todoback
    restart: always
    ports:
      - 3001:3001

В todofront я использую переменную среды REACT_APP_API_HOST со значением todoback. Однако таким образом между передней и задней частью отсутствует сообщение. Но когда я меняю значение todoback на localhost, приложение работает. Нельзя ли использовать имя контейнера или чего-то не хватает?

Для запуска контейнеров я использую:docker-compose up -d

Система: Ubuntu 20.04.6 LTS.

изображение 1:

изображение 2:

изображение 3:

В image1 контейнеры могут взаимодействовать друг с другом. В image2 я могу получить доступ к контейнеру todoback, используя localhost, но не используя todoback, который является именем контейнера.

На image3 я также могу получить доступ к контейнеру, используя его IP-адрес.

1 ответ

Это ожидаемо — имена контейнеров не могут быть разрешены на хосте. Но в пределах одной пользовательской сети вы можете использовать имя службы для разрешения и подключения к различным контейнерам.

docker-compose создает пользовательскую сеть и по умолчанию помещает в нее все контейнеры, определенные в файле компоновки.

Итак, вы можете обратиться кtodoback/todofrontвнутри контейнеров, но не с хоста.

Другие вопросы по тегам