2017-08-16 110 views
0

因此,这里是我想要做的事:无法连接到连接泊坞窗容器ECS

链接到Nginx的容器 - > Rails的容器中运行彪马

使用泊坞窗,撰写,该解决方案的伟大工程。我能够启动这两个容器,并且NGINX容器可以访问链接容器中端口3000上运行的服务。不幸的是,我将这个问题转移到AWS ECS时一直在处理很多难题。

首先,Dockerfile的Rails的相关位:

ENV RAILS_ROOT /www/apps/myapp 

RUN mkdir -p $RAILS_ROOT 
WORKDIR $RAILS_ROOT 

.... lots of files get put in their proper places .... 

EXPOSE 3000 

VOLUME [/www/apps/myapp/] 

CMD puma -C config/puma.rb' 

我证实,预计彪马开始,并出现在端口被服务的TCP流量3000

我的nginx的相关部分配置:

upstream puma { 
fail_timeout=0; 
    server myapp:3000; 
} 

server { 
    listen 80 default deferred; 

    server_name *.myapp.com; 

    location ~ (\.php$|\.aspx$|wp-admin|myadmin) { 
    return 403; 
    }  

    root /www/apps/myapp/public; 
    try_files $uri/index.html $uri @puma; 

Nginx的dockerfile:

ENV RAILS_ROOT /www/apps/myapp 

# Set our working directory inside the image 
WORKDIR $RAILS_ROOT 

EXPOSE 80 

这里是我的ECS任务定义:

{ 
"family": "myapp", 
"containerDefinitions": [ 
{ 
    "name": "web", 
    "image": "%REPOSITORY_URI%:nginx-staging", 
    "cpu": 512, 
    "memory": 512, 
    "portMappings": [ 
    { 
     "containerPort": 80, 
     "protocol": "tcp" 
    }, 
    { 
     "containerPort": 443, 
     "protocol": "tcp" 
    } 
], 
"links": [ 
    "myapp" 
], 
"volumesFrom": [ 
    { 
     "sourceContainer": "myapp", 
     "readOnly": false 
    } 
],   
"essential": true,  
"logConfiguration": { 
    "logDriver": "awslogs", 
    "options": { 
     "awslogs-group": "awslogs-myapp-staging", 
     "awslogs-region": "us-west-2", 
     "awslogs-stream-prefix": "awslogs-myapp-nginx" 
    } 
} 
}, 
{ 
    "image": "%REPOSITORY_URI%:v_%BUILD_NUMBER%", 
    "name": "myapp", 
    "cpu": 2048, 
    "memory": 2056, 
    "essential": true, 
    ...bunch of environment variables, etc. 
} 

我能够从我的nginx的容器内ping通MYAPP容器,所以我不认为这是一个安全组的问题。

+0

请问您的myapp容器包括3000端口映射 - 你截断你的任务定义MYAPP - 我认为它缺少的 - 因此你可以ping MYAPP但不能连接到3000 – abdollar

+0

看看这可以帮助您? https://stackoverflow.com/questions/34517265/linking-containers-between-task-definitions-in-aws-ecs –

+0

容器在同一个任务定义,所以我不应该需要映射端口或做任何奇怪服务发现。我想我的模式解掉这个:https://aws.amazon.com/blogs/compute/nginx-reverse-proxy-sidecar-container-on-amazon-ecs/ 我会深入到码头工人联网但在ECS上,也许有一个解决方案。 – mcheshier

回答

0

事实证明,这是一个AWS安全组的问题。我曾愚蠢地预计Rails应用程序或许提醒我它无法到达数据库,而是它只是挂在那里永远,直到我手动轨下开始了。然后我得到了导致快速解决的超时时间。