【问题标题】:After running docker-compose, port on Amazon EC2 are not getting mapped to the public IP address运行 docker-compose 后,Amazon EC2 上的端口未映射到公共 IP 地址
【发布时间】:2017-03-21 16:42:40
【问题描述】:

我通过运行在 AWS 上创建了一个 swarm

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 端口映射? 我已经为正在使用的安全组建立了正确的入站规则。

【问题讨论】:

  • 能否请您发布 docker-compose ps 的输出?
  • 同时发布 sudo netstat -ntlp 的输出

标签: amazon-web-services amazon-ec2 docker-compose docker-machine docker-swarm


【解决方案1】:

这里的问题是我在我的安全组配置中不允许 ICMP 通信。出于某种原因,这导致了我的问题。一旦我在我的安全组中正确配置了 ICMP 的入站规则,我就能够访问我的 docker 容器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 2017-06-25
    • 1970-01-01
    • 2016-03-21
    • 2015-05-10
    • 2022-10-17
    • 1970-01-01
    • 2019-04-14
    相关资源
    最近更新 更多