Я запускал две службы по отдельности
docker-compose run --service-ports django /bin/bash
docker-compose run --service-ports other /bin/bash
Хотя я вижу порты в docker ps
, служба не может взаимодействовать с открытыми портами другой службы.
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
586e859afcab littlehome_other "/bin/bash" 12 minutes ago Up 12 minutes 6379-6380/tcp, 9200/tcp zibann-reservation_other_run_6
994dadb0ad7f littlehome "/bin/bash" 25 minutes ago Up 25 minutes 0.0.0.0:10011->10011/tcp zibann-reservation_django_run_3
docker-compose.yml имеет
services:
django:
restart: always
build:
context: .
dockerfile: ./compose/production/django/Dockerfile
image: littlehome
depends_on:
- other
- nginx
env_file:
- ./compose/.envs/production/postgres
# command: /app/compose/production/django/uwsgi.sh
ports:
- "0.0.0.0:10011:10011"
other:
build:
context: .
dockerfile: ./compose/production/other/Dockerfile
image: littlehome_other
# depends_on:
# - postgres
expose:
- "9200"
- "6379"
- "6380"
volumes:
- ~/.bash_history:/root/.bash_history
Я пытаюсь позволить django
разговаривать с other:9200
docker network inspect zibann-reservation_default
показывает
"Containers": {
"994dadb0ad7f59e6a9ecaddfffe46aba98209ff2ae9eb0542f89dee969a85a17": {
"Name": "zibann-reservation_django_run_3",
"EndpointID": "02bf3e21aba290b999d26f0e52f2cb6b3aa792a10c86e08065d0b299995480dd",
"MacAddress": "02:42:ac:12:00:06",
"IPv4Address": "172.18.0.6/16",
"IPv6Address": ""
},
"ac5b1845f31f23bce0668ee7a427dc21aafbda0494cf67cc764df7b0898f5d23": {
"Name": "zibann-reservation_other_run_7",
"EndpointID": "b6cfcbfbf637d6521575c300d74fb483b47d6fa9e173aeb17f9c5bfc12341a37",
"MacAddress": "02:42:ac:12:00:02",
"IPv4Address": "172.18.0.2/16",
"IPv6Address": ""
},
"fe83a3addb7365b2439870e887a4eae50477f1c3531c6af60a91a07bb1226922": {
"Name": "zibann-reservation_postgres_1",
"EndpointID": "bee7d0fcc80f94303306d849fbb29a3362d1d71ceb7d34773cd82ab08bc80172",
"MacAddress": "02:42:ac:12:00:03",
"IPv4Address": "172.18.0.3/16",
"IPv6Address": ""
}
},
Это служба elasticsearch, и клиент пытается подключиться к elasticsearch через 'http://other:9200/reviewmeta_index/_count'
. Сработает ли это?
Убедитесь, что они подключены к одной сети.
Проверьте свою сеть с помощью докер сеть ls (используйте значение отсюда, чтобы подключиться позже)
Проверьте, какой мост используют ваши контейнеры: сеть докеров проверить мост
И подключите правильную сеть: докер сеть подключается по умолчанию мост zibann-резервация_django_run_3 (default-bridge - это ваша сеть, к которой вы хотите подключиться. Конечно, может быть что угодно)
Более подробную информацию можно найти здесь: https://docs.docker.com/network/network-tutorial-standalone/#use-the-default-bridge-network и https://docs.docker.com/engine/reference/commandline/network_connect/#related-commands
Я обновил операцию с проверкой сети докеров, кажется, что обе службы подключены к одной и той же сети (zibann-reservaton_default)
Вы можете вручную проверить, есть ли соединение, подключив сервер django "docker exec -it 994dadb0ad7f bash". (telnet порт или установка lynx и т. д.) Кажется, что IP-адреса время от времени меняются после перезапуска, поэтому также убедитесь, что вы подключаетесь к правильному IP-адресу.
обнаружил, что файл конфигурации elasticsearch необходимо изменить, чтобы позволить другим хостам подключаться (что-то вроде host = '*')
Замечательно полезные знания об отладке, даже если проблема / решение для меня были другими.
Когда я запускаю
docker inspect $(container_id)
для двух служб, он показывает одну и ту же сеть. `" Сети ": {" zibann -servations_default ": {`. Разве это не значит, что они подключены к одной сети? (Я еще не читал уроки)