AWS Elastic Beanstalk 上的 Docker 端口映射

Posted

技术标签:

【中文标题】AWS Elastic Beanstalk 上的 Docker 端口映射【英文标题】:Docker port mapping on AWS Elastic Beanstalk 【发布时间】:2019-11-14 10:29:32 【问题描述】:

我有一个通过 Dockerfile 指定的 Docker 容器,它必须使用 -p 标志运行才能正常运行。在我的本地机器上,运行后

docker run -d -p 5000:5000 blagtagger:v0.4.3

端口映射显示为0.0.0.0:5000->5000/tcp,一切正常。

现在,我需要将它部署在 AWS Elastic Beanstalk 上,所以我准备了我的 Dockerrun.aws.json 文件如下:


  "AWSEBDockerrunVersion": "1",
  "Ports": [
    
      "ContainerPort": 5000,
      "HostPort": 5000
    
  ]

但是,容器端口似乎没有正确映射到主机端口。端口映射显示为5000/tcp

如何让 Beanstalk 将映射设置为 0.0.0.0:5000->5000/tcp

【问题讨论】:

你仔细阅读过这个文档吗docs.aws.amazon.com/elasticbeanstalk/latest/dg/… 是的,这正是我从上面的 Dockerrun 示例中提取的地方。不确定这是否重要,但我的 Dockerfile 也确实声明了EXPOSE 5000,否则部署将失败。老实说,我不知道问题出在哪里。 【参考方案1】:

事实证明,没有优雅的方法可以做到这一点。根据答案here 和here,我在一个名为.ebextensions/01-commands.config 的文件中添加了以下内容:

commands:
    00001_add_port_mapping:
        cwd: /tmp
        command: 'sed -i "s/docker run -d/docker run -p 5000:5000 -d/" /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh'

并丢弃了Dockerrun.aws.json 文件。

【讨论】:

docker-compose 文件没有解决您的问题?

以上是关于AWS Elastic Beanstalk 上的 Docker 端口映射的主要内容,如果未能解决你的问题,请参考以下文章

如何避免 AWS Elastic Beanstalk 上的 TooManyApplicationVersion 异常?

反应:AWS Elastic Beanstalk 上的 502 错误网关

AWS Elastic Beanstalk 上的 Wordpress

AWS Elastic Beanstalk 上的 Spring Boot 并记录到文件

AWS Elastic Beanstalk 上的 Django manage.py

如何获取命令以从 Elastic Beanstalk 上的 Dockerfile.aws.json 运行?