我有一个使用 CircleCI 设置的项目,用于自动部署到 Elastic Beanstalk。我的 EBS 环境是一个单一容器、自动缩放的 Web 环境。我正在尝试运行一个侦听原始套接字端口 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"
}
]
}
我已确保在分配给我的项目环境的“角色”上公开端口 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
在我的容器上做时,我也看到这两种配置不是我想要的:
"PortBindings": {},
"PublishAllPorts": false,
如何在我的应用程序中触发端口绑定?
提前致谢。