Docker-Compose: не удается подключиться к контейнеру amazon / aws-iot-greengrass из другого контейнера - PullRequest
0 голосов
/ 26 июня 2019

Обновление:

Я нашел обходной путь. Похоже, что если я изменю команду на:

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"]

...