Как организовать три контейнера с помощью 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
внутри контейнеров, но не с хоста.