amazon-web-services - 将 Docker 部署到 AWS Elastic Beanstalk — 如何将端口转发到主机? (端口绑定(bind))

标签 amazon-web-services amazon-ec2 docker amazon-elastic-beanstalk circleci

我有一个使用 CircleCI 设置的项目,我正在使用它 auto-deploy to 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 没有将公开的端口转发到主机容器。我过去在运行不带 -P 标志的 docker run .... 时遇到过这种情况。

以下是通过 SSH 连接到计算机后的示例 session :

[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检查时,我还发现这两个配置不是我想要的:

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

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

提前致谢。

最佳答案

事实证明,我对 Docker 网络堆栈的工作方式产生了误解。当端口暴露但未发布时,本地网络接口(interface)仍然可以通过 Docker 容器的私有(private) IP 地址使用该端口。您可以通过查看docker inspect <container>来获取该IP地址。 .

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

在我的 EBS 部署中,nginx 也自动设置为将 (HTTP) 流量从端口 80 转发到此内部专用端口。

关于amazon-web-services - 将 Docker 部署到 AWS Elastic Beanstalk — 如何将端口转发到主机? (端口绑定(bind)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32317714/

相关文章:

python - 使用 boto3 创建 AWS Lambda 函数

linux - 使用 MongoDB docker 镜像停止虚拟机而不丢失数据

testing - JMeter 与远程服务器

docker - 针对不安全注册表的Openshift Origin运行应用会产生带有 “Error while pulling image”的卡住的pod

docker - 为什么不能将图像推送到我的私有(private)注册表?

java - 用 node.js/Java 编写的 AWS Lambda 函数是否存在任何性能/功能差异

amazon-web-services - Redshift 数据 API 查询语句大小限制为 100 KB

html - 拆分超大 (10+ GB) 文件并将其上传到 Amazon S3

Docker Composer 文件配置

amazon-web-services - Lambda S3 getObject流到ES接收管道