将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量到这个内部私有端口。
- Docker或Docker for AWS和AWS EC2上的部署
- 作为Docker Container运行时,squid Proxy不起作用
- 将cloudbees ec2泊坞窗图像与泊坞窗中的docker相结合
- 如何将fluentd容器放在ECS中的负载均衡器后面?
- DOCKER:在docker运行后,在容器中执行一次性命令
- Docker部署Jupyter笔记本电脑与GPU
- 如何从Tutum私有registry中将Amazon Docker的Docker镜像拖放到Amazon ECS?
- 失败(404错误)通过AWS EBS泊坞窗环境中的Nginx访问Amazon Linux API泊坞窗服务
- 错误:在Dockerfile中找不到EXPOSE指令,中止部署+ AWS + RAILS + DOCKER