Обратите внимание, что другие ответы / устранение неполадок действительны / правильны, но я хотел бы дать некоторую пищу для размышлений о работе с docker-compose, несмотря на то, что docker-compose отменил изменение слагов. Есть хорошая практика, которую можно выделить при использовании сервисов docker-compose.
Мои личные мысли - докер-композитор, пытался добиться изменения в том, как их инструмент использовался. Я прочитал кое-что о github, намекавшее на это, но это мое мнение после прочтения отзывов некоторых их разработчиков, в частности, из следующего вопроса github о слизняках .
Использование внутренних сервисных механизмов docker-compose
Я пытаюсь обобщить, поскольку следующие примеры могут быть не полностью применимы к вашей установке, но тем не менее они должны быть полезны. Поскольку вы уже используете docker-compose, есть преимущество в использовании обнаружения служб, предоставляемого через сети Docker, и docker-compose по сравнению с жестким кодированием доступа через имена контейнеров.
При использовании docker-compose создаются сервисы, состоящие из 1 .. * контейнеров. В вашем примере сервис framework
создается с 1 контейнером callback_framework_1_df361f67842c
.
Доступ к сервису из другого док-контейнера / кода в док-контейнере
Служба может использоваться для DNS / сети вместо имен контейнеров, то есть везде <protocol>://<host>:<port>/<endpoint>
, где container name
использовалось в качестве <host>
, service name
также может использоваться в качестве <host>
( например, выполнение ping внутри другого контейнера в сети Docker):
ping <service>
ping framework
против
ping <container-name>
ping callback_framework_1_df361f67842c
Оба вышеуказанных пинга работают. Docker заботится о сети с соответствующим контейнером, далее, когда есть несколько контейнеров, составляющих службу, он заботится о запросах балансировки нагрузки к контейнерам.
Доступ к вашим контейнерам через службу с хост-машины, т.е. запуск команд docker из сценариев
Адресация, если у вас есть сценарии, выполняющиеся с хост-машины, вы также можете использовать docker-compose вместо команд docker:
docker-compose exec <service> sh
docker-compose exec framework sh
против
docker exec -it <container-name> sh
docker exec -it callback_framework_1_df361f67842c sh
docker-exec по умолчанию равен первому контейнеру, но при наличии нескольких контейнеров, составляющих службу docker, целевой контейнер может быть адресован с использованием флага --index=<index>
. См. docker-compose exec документация для более подробной информации.