После запуска docker-compose порт в Amazon EC2 не отображается на общедоступный IP-адрес

Я создал рой на AWS, запустив

docker-machine create --driver amazonec2 --amazonec2-access-key $AWS_ACCESS_KEY_ID --amazonec2-secret-key $AWS_SECRET_ACCESS_KEY --amazonec2-vpc-id $AWS_VPC_ID --amazonec2-region "us-west-2" --engine-opt dns=8.8.8.8 aws-mh-keystore
eval "$(docker-machine env aws-mh-keystore)"

docker run -d -p "8500:8500" -h "consul"  progrium/consul -server -bootstrap

docker-machine create --driver amazonec2 --amazonec2-access-key $AWS_ACCESS_KEY_ID --amazonec2-secret-key $AWS_SECRET_ACCESS_KEY --amazonec2-vpc-id $AWS_VPC_ID --amazonec2-region "us-west-2" --engine-opt dns=8.8.8.8 --engine-label n_type=master   --swarm --swarm-master --swarm-strategy "spread" --swarm-discovery="consul://$(docker-machine ip aws-mh-keystore):8500" --engine-opt="cluster-store=consul://$(docker-machine ip aws-mh-keystore):8500" --engine-opt="cluster-advertise=eth0:2376" aws-swarm-master

eval $(docker-machine env --swarm aws-swarm-master)

И я создал два узла, используя следующую команду

docker-machine create --driver amazonec2 --amazonec2-access-key $AWS_ACCESS_KEY_ID --amazonec2-secret-key $AWS_SECRET_ACCESS_KEY --amazonec2-vpc-id $AWS_VPC_ID --amazonec2-region "us-west-2" --engine-opt dns=8.8.8.8 --engine-label n_type=worker --swarm --swarm-discovery="consul://$(docker-machine ip aws-mh-keystore):8500" --engine-opt="cluster-store=consul://$(docker-machine ip aws-mh-keystore):8500" --engine-opt="cluster-advertise=eth0:2376"  aws-swarm-node-01

docker-machine create --driver amazonec2 --amazonec2-access-key $AWS_ACCESS_KEY_ID --amazonec2-secret-key $AWS_SECRET_ACCESS_KEY --amazonec2-vpc-id $AWS_VPC_ID --amazonec2-region "us-west-2" --engine-opt dns=8.8.8.8 --engine-label n_type=worker --swarm --swarm-discovery="consul://$(docker-machine ip aws-mh-keystore):8500" --engine-opt="cluster-store=consul://$(docker-machine ip aws-mh-keystore):8500" --engine-opt="cluster-advertise=eth0:2376"  aws-swarm-node-02

После этого я использую следующую команду для сборки своего мультиконтейнерного приложения с помощью:

docker-compose up --build

На этом этапе процесс сборки завершается успешно, и все выглядит нормально.

Тем не менее, когда я бегу

docker-compose ps

Я вижу, что открытыми портами являются 0.0.0.0:<> -> tcp:<> Идеальным поведением должно быть сопоставление портов из контейнера на хост EC2.

Мой файл docker-compose выглядит следующим образом

version: "2"
services: 
  web_api:
    build: 
      context: .
      dockerfile: Dockerfile
      # args: ["constraint:engine.labels.n_type==master"]
    hostname: web_api
    ports:
      - "5000:5000"
    volumes:
      - .:/code
    links: 
      - worker
    depends_on: 
      - worker
 # Redis
   redis:
    build: 
      context: .
      dockerfile: Dockerfile-redis
    # image: redis
    hostname: redis
    ports:
       - "6379:6379"

 # Celery worker
 worker:
     build:
      context: .
      dockerfile: Dockerfile-celery
      # args: ["constraint:engine.labels.n_type==worker"]
    volumes:
      - .:/app
    links:
      - redis
    depends_on:
      - redis
    # environment:
      # - "constraint:engine.labels.n_type == worker"
    command: ./run_celery.sh

Почему сопоставление портов AWS не назначается? Я установил правильные входящие правила для используемой группы безопасности.

1 ответ

Решение

Проблема заключалась в том, что я не разрешил ICMP-связь в конфигурации моей группы безопасности. По какой-то причине это вызывало у меня проблемы. После того, как я правильно настроил входящие правила для ICMP в своей группе безопасности, я смог получить доступ к моим док-контейнерам.

Другие вопросы по тегам