Fre*_*ger 17 amazon-web-services laravel docker aws-fargate
编辑:我的第一个问题是"如何使用Fargate链接AWS ECS上的任务定义中的容器?" 但是,从一开始我可能是错的,所以我改变了我的问题,并保留以下内容:
我正在尝试通过ECS在AWS上部署一个简单的基于Laravel的应用程序.我的服务在本地使用docker-compose-yml文件按预期工作.
但在AWS上我得到:"nginx: [emerg] host not found in upstream "app" in /etc/nginx/conf.d/default.conf:12"
来自我的网络容器日志.
这里是我服务的容器:web(nginx),app(Laravel),数据库(MySQL)和缓存(redis).
我知道任务描述的所有容器共享相同的命名空间,因此不需要链接容器(我们不能使用链接属性与Fargate).
你能帮我解决一下这个问题吗?我瞎了.
这是我工作的本地docker-compose.yml文件:
version: '2'
services:
# The Application
app:
image: 696759765437.dkr.ecr.us-east-1.amazonaws.com/ali-
maison/tribe-migrate
volumes:
- /var/www/storage
env_file: '.env'
environment:
- "DB_HOST=database"
- "REDIS_HOST=cache"
# The Web Server
web:
image: 696759765437.dkr.ecr.us-east-1.amazonaws.com/ali-maison/laravel-web
ports:
- 80:80
# The Database
database:
image: mysql:5.6
volumes:
- dbdata:/var/lib/mysql
environment:
- "MYSQL_DATABASE=homestead"
- "MYSQL_USER=homestead"
- "MYSQL_PASSWORD=secret"
- "MYSQL_ROOT_PASSWORD=secret"
# redis
cache:
image: redis:3.0-alpine
volumes:
dbdata:
Run Code Online (Sandbox Code Playgroud)
这是我的web容器Dockerfile:
FROM nginx:1.10
ADD vhost.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www
Run Code Online (Sandbox Code Playgroud)
我的vhost.conf:
server {
listen 80;
index index.php index.html;
root /var/www/public;
location / {
try_files $uri /index.php?$args;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
}
Run Code Online (Sandbox Code Playgroud)
解决办法是:
上面提到了第二部分,但没有明确说两个容器必须在同一个任务中。
您可以在此处找到更多信息:https : //github.com/aws-samples/amazon-ecs-fargate-aspnetcore/blob/master/README.md
来自 vhost.conf:
fastcgi_pass app:9000;
主机名“app”适用于 docker-compose,因为这就是您在 docker-compose.yml 中为服务命名的名称。docker-compose 为其必须管理的容器创建一个新网络,该网络使容器能够通过主机名相互引用,而无需进一步配置。
Fargate 没有此功能,因此“app”无法解析。
Fargate 目前允许您使用的唯一网络模式是一种名为awsvpc的特殊 AWS 模式。Fargate 中运行的每个任务都有自己的弹性网络接口 (ENI),这意味着每个任务都有自己的私有 IP 地址。您还可以将 ENI 配置为具有公共 IP 地址,就像在 EC2 实例上使用 ENI 一样。
如何从 nginx 容器解析您的应用程序容器
在 Fargate 中,深入了解应用程序服务器正在运行的任务定义(集群 > 任务选项卡 > 单击应用程序服务器的任务列中的容器 ID)。网络部分将具有私有 IP。
在你的conf中用这个ip替换主机名“app”:
fastcgi_pass <private_ip>:9000;
归档时间: |
|
查看次数: |
2661 次 |
最近记录: |