泊坞窗:proxy_pass到另一个容器 - nginx的:主机在上游未发现
(我知道在别人面前问这个问题,但我不能够解决使用其他职位提出的解决方案的问题,所以我想我将尝试发布我的配置文件,看看是否有人可以帮助。)泊坞窗:proxy_pass到另一个容器 - nginx的:主机在上游未发现
我想为nginx创建一个容器,并使用proxy_pass
将请求传递到正在运行的Web应用程序的容器。我无法弄清楚如何在两个容器之间进行通信。当我尝试运行docker stack deploy -c docker-compose.yml somename
时,只有Web容器启动。 nginx容器无法启动,并且停留在尝试重新启动的循环中。这是日志的消息,我得到:
2017年8月16日14时56分10秒[EMERG] 1#1:主机在上游没有发现 “网络:8000” 在/ etc/nginx的/ conf目录 。 d/nginx.conf:2 nginx的:[EMERG]在 上游未找到主机 “网络:8000” 中/etc/nginx/conf.d/nginx.conf:2
我找到答案,作为只要您在docker-compose.yml
文件中使用与服务相同的名称,nginx就会找到该变量。但是,这似乎没有帮助我的情况。
如何像这样不同的容器之间的沟通工作? 'web'变量在哪里
我见过的大多数例子都在docker-compose.yml
文件中使用version: "2"
,这应该有所作为吗?
我的搬运工,compose.yml:
version: "3"
services:
web:
image: user/repo:web
deploy:
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "8000:80"
networks:
- webnet
nginx:
image: user/repo:nginx
ports:
- 80:80
links:
- web:web
depends_on:
- web
networks:
webnet:
Nginx的配置:
upstream docker-web {
server web:8000;
}
server {
listen 80;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location/{
proxy_pass http://docker-web;
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;
}
}
那么你可以做到这一点通过编辑/etc/hosts中文件并添加为您的虚拟主机正确的入口
1.1.1.1 web
Obviouslly你必须与Web服务器的真实IP地址(私有一个我想)来代替1.1.1.1。保存该文件并重试。另一种解决方法是在配置更换:
upstream docker-web {
server web:8000;
}
与
upstream docker-web {
server web-ip-address:8000;
}
如果你会去第二次,不要忘记重启/重装nginx的!
我想通了,如何解决这个问题。得到了一些帮助,以解决docker-compose.yml
,所以它看起来是这样的:
泊坞窗 - 撰写 - 阳明:
version: "3"
services:
web:
image: user/repo:web
deploy:
resources:
limits:
cpus: "0.1"
memory: 50M
restart_policy:
condition: on-failure
ports:
- "8000:80"
networks:
main:
aliases:
- web
nginx:
image: user/repo:nginx
ports:
- 80:80
links:
- web:web
depends_on:
- web
networks:
main:
aliases:
- nginx
networks:
main:
这个nginx的容器居然跑后,但仍不能连接到的web容器。发现我能同时使用curl web
和curl web -p 8000
从网站得到的页面,从nginx的容器内。然后,我改变了上游在我nginx.conf
从这个
upstream docker-web {
server web:8000;
}
这样:
upstream docker-web {
server web;
}