Имена Хостов Docker Не Разрешаются В Пользовательской Сети

  • Автор темы Oki doki
  • Обновлено
  • 18, Oct 2024
  • #1

У меня есть следующая конфигурация в моем

Error connecting to mongo : no reachable servers
file.

version: '3.3'
services:

service-1:

container_name: 'service-1'

build: './service-1'

depends_on:

- 'mongo'

- 'consul'

networks:

backend:

aliases:

- service-1

service-2:

build: './service-2'

ports:

- '8825:8825'

- '8835:8835'

networks:

frontend:

backend:

aliases:

- service-2

depends_on:

- 'mongo'

- 'consul'

consul:

image: 'consul:latest'

networks:

backend:

aliases:

- consul

mongo:

image: 'mongo:latest'

networks:

backend:

aliases:

- mongo

networks:

frontend:

backend:

internal: true

Когда мои контейнеры запускаются, они не могут взаимодействовать друг с другом, используя имена хостов.

docker-composer.yml

Большинство контейнеров используют контейнер mongo db, но они не могут даже добраться до него, и я получаю следующую ошибку.

Помогите пожалуйста решить проблему, я застрял.

Спасибо.

Oki doki


Рег
03 Apr, 2008

Тем
71

Постов
200

Баллов
555
  • 25, Oct 2024
  • #2

В файле компоновки много ненужных настроек, вот урезанная версия, которая тоже подойдет:

version: '3.3'
services:

service-1:

build: './service-1'

networks:

- backend

service-2:

build: './service-2'

ports:

- '8825:8825'

- '8835:8835'

networks:

- frontend

- backend

consul:

image: 'consul:latest'

networks:

- backend

mongo:

image: 'mongo:latest'

networks:

- backend

networks:

frontend:

backend:

internal: true

Вы автоматически получаете псевдоним имени службы для каждого контейнера, его не нужно дублировать. Вы также потеряете возможность масштабировать сервис, если дадите ему имя контейнера. Я бы также рекомендовал перенести этап сборки из файла создания и использовать имя образа для приложений, которые вы создаете локально.


Теперь о вероятной проблеме: в вашем файле компоновки есть depend_on. В лучшем случае это не даст того, что вы ищете. Все это проверяет, что другой контейнер создан и запущен, но не то, что приложение внутри готово обслуживать трафик, и БД может потребоваться время, чтобы стать доступной. В худшем случае вы получите сообщение об ошибке, что оно не поддерживается, если попытаетесь перевести его в режим роя.

Вместо того, чтобы зависеть от Docker, обновите точку входа вашего приложения, чтобы проверить наличие внешних зависимостей, и подождите минуту или две, пока они станут доступными, прежде чем произойдет сбой. Очень простой пример инструмента для этого: подожди это написано как сценарий оболочки bash.

 

Smooccabe


Рег
10 Feb, 2014

Тем
71

Постов
199

Баллов
564
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно