Обновление:
Я нашел обходной путь. Похоже, что если я изменю команду на:
command: ["/scripts/wait-for-it.sh", "localhost:8883"]
и установите network_mode
network_mode: host
Наконец-то работает. Тем не менее, это кажется мне слишком бандитским, чтобы быть решением для меня.
Задача
Для меня это было головокружением. Я создал файл docker-compose, который порождает три изображения: изображение amazon / aws-iot-greengrass, изображение postgres (я использовал это только для проверки возможности подключения к чему-либо из образа моего приложения) и приложение изображение с питона: 3.7-альпийский.
Я использую обычно используемую wait-for-it.sh в качестве команды. После этого я назову свой входной скрипт.
Проблема в том, что время ожидания всегда истекает при ожидании появления гринграсса: 8883.
Если я позвоню:
./wait-for-it.sh 127.0.0.1:8883
на хост-машине работает.
Также я могу пинговать зеленую траву из контейнера.
Как вы можете видеть в комментариях в прикрепленном docker-compose.yml, я также могу вызвать wait-for-it на образе db: 5432, и это успешно выполнено.
докер-compose.yml
version: '3'
services:
# web:
# build: .
# ports:
# - "5000:5000"
application:
depends_on: [greengrass]
build: .
# image: ubuntu:latest
volumes:
- .:/scripts
# command: ["ping","greengrass"] <--works
# command: ["/scripts/wait-for-it.sh", "greengrass:8883"] # <-- This times out
command: ["/scripts/wait-for-it.sh", "db:5432"] # <-- This works!
greengrass:
image: "amazon/aws-iot-greengrass"
volumes:
- ./certs/certs:/greengrass/certs
- ./certs/config:/greengrass/config
ports:
- "8883:8883"
expose:
- "8883"
entrypoint:
- /greengrass-entrypoint.sh
db:
image: postgres
ports:
- "5432:5432"
Подведем итог:
Что работает:
- команда: ["ping", "greengrass"]
- команда: ["/scripts/wait-for-it.sh", "db: 5432"]
- вызов './scripts/wait-for-it.sh 127.0.0.1:8883' на хост-машине
Что не работает:
- команда: ["/scripts/wait-for-it.sh", "greengrass: 8883"]