将Docker部署到AWS Elastic Beanstalk – 如何将端口转发到主机? (端口绑定)

我有一个使用CircleCI设置的项目,用于自动部署到Elastic Beanstalk 。 我的EBS环境是一个容器,自动缩放,networking环境。 我试图运行一个服务,监听原始套接字端口8080。

我的Dockerfile:

FROM golang:1.4.2 ... EXPOSE 8080 

我的Dockerrun.aws.json.template:

 { "AWSEBDockerrunVersion": "1", "Authentication": { "Bucket": "<bucket>", "Key": "<key>" }, "Image": { "Name": "project/hello:<TAG>", "Update": "true" }, "Ports": [ { "ContainerPort": "8080" } ] } 

我已经确保在分配给我的项目环境的“angular色”上公开端口8080。

我使用了上面链接的CircleCI教程中的确切部署脚本(除了更改后的名称)。

在运行我的EBS应用程序的EC2实例中,我可以看到Docker容器已经成功运行,只是Docker没有将公开的端口转发到主机容器。 当我运行docker run ....没有-P标志的时候,我遇到了这个问题。

以下是SSH进入计算机后的示例会话:

 [ec2-user@ip-xxx-xx-xx-xx ~]$ sudo docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a036bb061aea aws_beanstalk/staging-app:latest "/bin/sh -c 'go run 3 days ago Up 3 days 8080/tcp boring_hoover [ec2-user@ip-xxx-xx-xx-xx ~]$ curl localhost:8080 curl: (7) Failed to connect to localhost port 8080: Connection refused 

我期望看到的是->8080或任何在容器转发到主机上。

当我在docker inspect我的容器时,我也看到这两个configuration不是我想要的:

  "PortBindings": {}, "PublishAllPorts": false, 

如何在我的应用程序中触发端口绑定?

提前致谢。

事实certificate,我对Docker的networking堆栈如何工作产生了误解。 当端口暴露但未发布时,通过Docker容器的私有IP地址,端口仍可用于本地networking接口。 你可以通过检查docker inspect <container>来获得这个IP地址。

而不是curl localhost:8080我可以curl <containerIP>:8080

在我的EBS部署中,nginx自动设置为从端口80转发(HTTP)stream量到这个内部私有端口。