我正在 AWS Elastic Beanstalk 内运行 Docker 容器,运行 Amazon 的“Amazon Linux”,我认为它是 CentOS 的衍生产品。
在我的开发环境中,我想在我的应用程序上启用调试,以便我可以从本地计算机进行远程调试。这当然需要一个额外的端口,但AWS默认情况下只会将Docker容器中的一个端口映射到主机上。
我在机器上,可以看到 Docker 容器有一个本地地址(172.xxx),当我在主机上时,我可以直接点击该地址上的调试端口。问题是这个地址当然无法从我的本地计算机访问。
我想手动创建一个端口转发规则来转发呼叫<my-aws-host-ip>:<port>
,<docker-local-ip>:<port>
以便我可以连接进行远程调试。我相信 iptables 可能是正确的工具,但我不熟悉它的用法。我怎样才能实现这个目标?
答案1
创建一个没有配置的 Dockerfile,例如:
//Dockerfile
FROM somePkg:1.2.3
EXPOSE 1337 8080 8081
记住这一点,您将无法通过 PrivateIP 进行访问,只能通过 PublicIP 进行访问。您需要对此更加感兴趣,AWS 的 ElasticBeanstalk 已经构建了一些iptables
对您有利的规则。如果您不使用v2
该文件,则需要您让 docker 容器映射端口Dockerrun.aws.json
。
另请记住,AWS 的 ElasticBeanstalk 会自动将列表中的第一个端口转发到端口 80。
所以在这种情况下会是external_interface:80 -> docker_container:1337