Ожидается, потому что, когда вы запускаете контейнер, как вы (docker run IMAGE
), контейнеры используют мостовую сеть по умолчанию Docker.
. Вы можете проверить это, проверив эту сеть: docker network inspect bridge
.
Мост по умолчанию не принимает сетевое разрешение контейнеров по имени контейнера, как вы (redis
).
Кроме того, именем контейнера по умолчанию является не имя изображения, а сгенерированное имя docker.
Вот почему вы получаете эту ошибку во время выполнения:
Не удается подключиться к redis: // redis: 6379/1
Обратите внимание, что вы по-прежнему можете ссылаться на контейнеры, принадлежащие мост по умолчанию по их IP-адресам, но это, как правило, нежелательно, поскольку это жестко кодирует их со стороны клиента.
Это работает с Docker compose, потому что :
По умолчанию Compose устанавливает единую сеть для вашего приложения. Каждый контейнер для службы присоединяется к сети по умолчанию и доступен для других контейнеров в этой сети, и может быть обнаружен ими с именем хоста, идентичным имени контейнера .
. для связи по имени контейнера с docker run
вам необходимо:
- добавить эти контейнеры в той же сети, но не по умолчанию, предоставленной Docker
- чтобы дать явное имя контейнеру, который вы хочу сослаться (хотя делать это для обоих контейнеров хорошо, чтобы контролировать / управлять им проще) другим.
Например, создайте пользовательскую мостовую сеть и добавьте контейнеры в нее при запуске:
docker network create -d bridge my-bridge-network
docker run -it -p 6379:6379 --network=my-bridge-network --name=redis redis
docker run -it --network=my-bridge-network --name=celery image_celery