Docker与awsvpc网络模式链接

时间:2019-02-19 17:47:06

标签: amazon-web-services docker amazon-ecs

我有一个使用tomcat:8.5-jre8-alpine映像在ECS中部署的Java Webapp。该任务的网络模式为awsvpc;我有许多任务在3个以ALB为首的EC2实例上运行。

这工作正常,但现在我想在每个tomcat容器的前面添加一个nginx反向代理,类似于以下示例:https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy

我的缩写容器定义文件是:

{
    "containerDefinitions": [
     {
       "name": "nginx",
       "image": "<NGINX reverse proxy image URL>",
       "memory": "256",
       "cpu": "256",
       "essential": true,
       "portMappings": [
         {
           "containerPort": "80",
           "protocol": "tcp"
         }
       ],
       "links": [
         "app"
       ]
     },
     {
       "name": "app",
       "image": "<app image URL>",
       "memory": "1024",
       "cpu": "1024",
       "essential": true
     }
    ],
    "volumes": [],
    "networkMode": "awsvpc",
    "placementConstraints": [],
    "family": "application-stack"
}

当我尝试保存新任务定义时,收到错误消息:“当网络类型为awsvpc时,不支持链接”

我正在使用awsvpc网络模式,因为它使我可以通过安全组对入站流量进行精细控制。

使用awsvpc网络模式时,是否可以用两个链接的容器创建任务定义?

2 个答案:

答案 0 :(得分:0)

实际上,如果要使用反向代理,则可以停止使用链接,因为可以进行服务发现或使用反向代理来使用依赖项。

如果您仍然想使用link而不是使用该反向代理,则可以使用consulFabio。两种服务都是可泊坞的。

因此,无需使用awsvpc,您可以使用consul进行服务发现。

希望有帮助!

答案 1 :(得分:0)

您根本不需要链接部分,因为awsvpc允许您简单地通过使用来引用其他容器

  

localhost:8080(或其他容器映射到的任何端口)

在您的nginx配置文件中。

因此,请从json中删除链接,并在nginx配置中使用localhost:{container-port}。就这么简单。