我也搜索其他问题,但它们不适合我。 (Docker nginx reverse proxy gives "502 Bad Gateway"或docker nginx 502 bad gateway)
在我的情况下, 我按如下所示将docker-ce安装到我的个人VPS服务器上:
Client:
Version: 18.03.1-ce
API version: 1.37
Go version: go1.9.5
Git commit: 9ee9f40
Built: Wed Jun 20 21:43:51 2018
OS/Arch: linux/amd64
Experimental: false
Orchestrator: swarm
Server:
Engine:
Version: 18.03.1-ce
API version: 1.37 (minimum version 1.12)
Go version: go1.9.5
Git commit: 9ee9f40
Built: Wed Jun 20 21:42:00 2018
OS/Arch: linux/amd64
Experimental: false
然后
拉出wordpress, mysql
和jwilder/nginx
反向代理的标准最新版本
并使用给定的标准代码
MYSQL:
docker run --name myweb_com_mysql -v /opt/docker-volumes/myweb_com_mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD="myweb41#D_fG" --restart unless-stopped -d mysql
WordPress:
docker run --name myweb_com_wordpress --link myweb_com_mysql:mysql -p 127.0.0.1:48010:80 -v /opt/docker-volumes/myweb_com_wordpress:/var/www/html -e VIRTUAL_HOST="myweb.com,www.myweb.com" --restart unless-stopped -d wordpress
和NGINX REVERSE PROXY:
docker run -d -p 80:80 --name nginx-proxy -v /var/run/docker.sock:/tmp/docker.sock jwilder/nginx-proxy
这有什么问题?
致谢
答案 0 :(得分:1)
Jason Wilder在他的README.md
中写道:
用法
要运行它:
$ docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy
然后使用env var
启动要代理的任何容器VIRTUAL_HOST=subdomain.youdomain.com
$ docker run -e VIRTUAL_HOST=foo.bar.com ...
我看到您以相反的顺序放置命令,最后从nginx-proxy
开始。因此,它不起作用。
一个小小的旁注:我非常尊重Jason对他所做的社区工作。但是在某些时候,我本人停止使用他的nginx-proxy
,而是开始使用简单的nginx
映像在DevOps流程中为其动态添加配置。原因是mapping /var/run/docker.sock
to inside of a container is a huge security risk。另一个原因是nginx-proxy
当时不是很稳定,并且没有将特定的内容转发到我的容器(例如Jira的某些标头)。不确定现在如何运行,我的DevOps使用自己的解决方案是否足够稳定,我永远也不会暴露带有上述安全风险的产品/测试/登台环境。
无论如何。我生成了myweb.conf
之类的文件,其中包括:
server {
server_name myweb.com;
location / {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://myweb:80;
}
}
通知proxy_pass http://myweb:80;
-如果容器位于同一网络上,则nginx的/etc/hosts
中还有其他容器。但是我通常是从正在运行的容器中获取IP来生成conf
文件。安全胜过遗憾。
然后,我启动一个nginx
容器并将文件添加到其中。通常我用docker-compose
来做到这一点:
version: '3.4'
services:
service-nginx:
image: nginx:latest
container_name: service-nginx
restart: always
volumes:
- ${nginx_basepath}/nginx.conf:/etc/nginx/nginx.conf
- ${nginx_basepath}/conf.d/:/etc/nginx/conf.d/
ports:
- "80:80"
我将myweb.conf
保存到${nginx_basepath}/conf.d/
,它自动出现在nginx配置中,因此nginx意识到了。之后,nginx只需要重新加载docker exec -i service-nginx nginx -s reload
。
祝你好运!
答案 1 :(得分:-1)
您好,据我所知-不建议使用链接,建议创建您自己的网络
https://docs.docker.com/network/links/#connect-using-network-port-mapping
我希望这可以帮助您