【发布时间】:2018-01-04 16:34:22
【问题描述】:
我使用多个 docker-compose 文件:
一个用于在同一网络上运行:postgres 和 nginx => 这个容器集合应该一直在运行
每个 asp 核心网站一个(每个在特定端口上) => 这个容器是通过 CI/CD 管道 (VSTS) 更新的
因为 Nginx 在定义上游时需要知道主机名,如果 asp 核心容器没有运行,那么它的主机名是未知的,那么 nginx 在 docker-compose up 命令上会抛出错误:
nginx | 2018/01/04 15:59:17 [emerg] 1#1: host not found in upstream
"webportalstage:5001" in /etc/nginx/nginx.conf:9
nginx | nginx: [emerg] host not found in upstream
"webportalstage:5001" in /etc/nginx/nginx.conf:9
nginx exited with code 1
显然,如果之前运行过 asp 核心容器,那么 nginx 知道主机名 webportalstage 并且一切正常。但开始的顺序不是我所期望的。
有什么解决方案可以在上游使用未知的主机名启动 nginx 吗?
这是我的 nginx.conf 文件:
worker_processes 4;
events { worker_connections 1024; }
http {
sendfile on;
upstream webportalstage {
server webportalstage:5001;
}
server {
listen 80;
location / {
proxy_pass http://webportalstage;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Host $server_name;
}
}
}
还有两个 docker-compose 文件: Nginx + Postgres:
version: "3"
services:
proxy:
image: myPrivateRepo:latest
ports:
- "80:80"
container_name: nginx
networks:
aspcore:
aliases:
- nginx
postgres:
image: postgres:latest
environment:
- POSTGRES_PASSWORD=myPWD
- POSTGRES_USER=postgres
ports:
- "5432:5432"
container_name: postgres
networks:
aspcore:
aliases:
- postgres
networks:
aspcore:
driver: bridge
我的一个asp核心网站:
version: "3"
services:
webportal:
image: myPrivateRepo:latest
environment:
- ASPNETCORE_ENVIRONMENT=Staging
container_name: webportal
networks:
common_aspcore:
aliases:
- webportal
networks:
common_aspcore:
external: true
【问题讨论】:
-
aspcore在 nginx docker-compose 与common_aspcore在核心 docker-compose 配置中? -
是的,这很特别,但是当您使用 docker-compose 创建网络时,真实的网络名称是:directoryName_nameofyourservice 所以我在 aspcore 网站 docker-compose 中使用他的真实姓名将网络称为外部网络。我只尝试使用 aspcore 名称网络,但出现网络不存在之类的错误
标签: docker nginx asp.net-core docker-compose