运行 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 主机的端口映射。

我的码头工人撰写文件如下

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

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

最新更新