在AWS EB上部署docker时如何映射端口

时间:2019-06-07 13:46:38

标签: amazon-web-services docker amazon-elastic-beanstalk

我有一个要部署到弹性beantalk中的环境中的服务。如果要在本地构建它,请使用以下行:

docker run --detach --name my-nlx-inway (some env en volume parameters) --publish 4443:8443 nlxio/inway:latest

我尝试在Dockerfile中设置所有这些设置:

FROM nlxio/inway:latest
ENV NAME my-nlx-inway
EXPOSE 4443

当我部署一切顺利时,我的服务已注册,仅显示为脱机状态。我认为它在映射中。 使用命令我说--publish 4443:8443,在Dockerfile中我只说EXPOSE 4443

所以我尝试构建一个dockerrun.aws.json

{
  "AWSEBDockerrunVersion": "1", 
  "Ports": [
    {
      "ContainerPort": 8443,
      "HostPort":4443
    }
  ]
}

我使用配置文件添加了映射:

container_commands:
  00001_add_mapping:
    command: 'sed -i "s/docker run -d/docker run -p 4443:8443 -d/" /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh'

我在记录中看到了结果:

'docker ps' ran at Tue Jun 11 12:20:02 UTC 2019: 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                NAMES
741a52caf467        f06676e20291        "/usr/local/bin/nlx-…"   11 minutes ago      Up 11 minutes       4443/tcp, 0.0.0.0:4443->8443/tcp   optimistic_johnson

1 个答案:

答案 0 :(得分:0)

好的,除了添加带有配置文件的映射外,我还需要添加一个侦听器。 所以我的最终结构如下:

- .ebextensions
  |-commands.config
- Dockerfile

我的commands.config看起来像这样:

container_commands:
  00001_add_mapping:
    command: 'sed -i "s/docker run -d/docker run -p 4443:8443 -d/" /opt/elasticbeanstalk/hooks/appdeploy/enact/00run.sh'
option_settings:
  aws:elb:listener:4443:
    ListenerProtocol: TCP
    InstancePort: 4443