首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于AWS ECR的部署: nginx:[emerg]主机在上游"app:9000“中/etc/nginx/con.d/default.conf:2中找不到

基于AWS ECR的部署: nginx:[emerg]主机在上游"app:9000“中/etc/nginx/con.d/default.conf:2中找不到
EN

Stack Overflow用户
提问于 2020-03-10 03:11:33
回答 3查看 2.1K关注 0票数 1

我很难将AWS任务定义配置为运行简单的PHP和基于Nginx的容器。

我的"app“容器运行在app:9000端口,Nginx运行在80端口。Nginx正在通过fastcgi_pass app-upstream;将请求转发到app容器。

所有这些都在当地运行得很好。相同的配置在DigitalOcean Docker实例中运行良好,但在AWS中失败。

我猜想某些任务定义配置问题,但我找不到它。

错误日志:

我从Nginx容器获得这个日志

代码语言:javascript
运行
复制
nginx: [emerg] host not found in upstream "app:9000" in /etc/nginx/conf.d/default.conf:2

和来自App (PHP)容器的日志

ECS

我用T2小实例创建了一个简单的集群,它运行得很完美。

Dockerfile

在这个Github中,我添加了Dockerfile for App,Nginx映像,docker-compose.yml文件和task-defination.json文件,如果在停靠文件中有任何错误的话。

源代码回购:https://github.com/arifulhb/docker-ecr-sample

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2020-03-10 05:51:43

您的问题与nginx配置中提到的错误上游路径有关。

做以下要调查的事情,如果不需要,也要避免在docker-组合文件中使用自定义容器名称:-

快速解决办法是:-

test_app:9000

  • 从停靠组合文件中移除容器名。
  1. (例如: test_app )被自动视为容器名。
  2. 在进行上述更改后,正确的上游路径应该是

正确和推荐的建立码头文件的方法-合成文件:-

"intranet"

  • Mention

  • 创建一个自定义的停靠网络,假设这个网络名为,这个网络在您创建的每个服务中都是"intranet“--复合文件。

这对你有什么帮助?您可以检查您创建的这个网络,确定您的容器是否正确连接,并标识用于连接的名称。

Command : docker network inspect <network_name>

NOTE : Docker treats container names as host names by default for internal connections.

票数 2
EN

Stack Overflow用户

发布于 2020-03-10 05:45:01

在使用多个容器时,容器名称对于提供内部连接非常重要。

正如我看到您的Docker文件一样,容器名称应该与nginx中使用的名称相匹配。

代码语言:javascript
运行
复制
version: '3'
services:
  test_app:
      container_name: app # not test_app_1
      volumes:
        - test-app-data:/var/www/app
  test_nginx:
      image: "xxxxxx.dkr.ecr.xx-xx-1.amazonaws.com/test-nginx"
      build:
        context: ./docker/nginx
        dockerfile: Dockerfile
      container_name: nginx
      ports:
        - "80:80"
        - "443:443"
      volumes:
        - test-app-data:/var/www/app
        - test-nginx-log:/var/log/nginx
      external_links:
        - app # not test_app_1
      depends_on:
        - test_app
volumes:
  test-app-data:
  test-nginx-log:
票数 1
EN

Stack Overflow用户

发布于 2021-04-09 14:32:16

我也有同样的问题。我的“博客”容器运行在blog:8000端口,"nginx“容器运行在80端口。"nginx“容器正在将请求转发到"blog”容器。

因为我根本没有在"nginx“容器的”网络设置“中设置”链接“。

因此,我将后台容器的名称"blog“放在前面的容器"nginx”中(“链接”在“nginx”容器的“网络设置”中)。

然后,正确地运行"blog“和"nginx”容器是成功的。

因此,在您的示例中,将back容器的名称"app“放在前面的容器"nginx”中(在“nginx”容器的“网络设置”中的“链接”)。看起来不错。我用的是Adiii's solution

不要忘记将"CMD-SHELL, curl -f http://localhost:9000/ || exit 1“放在”命令“中,在”应用程序“容器的”健康检查“中。

此外,不要忘记将"app“放在”容器名称“中,并在”启动依赖排序“中的”启动依赖排序“中选择”健康“来表示"nginx”容器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60611062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档