问题描述
我有许多 docker 容器通过 docker nginx 组合(docker-compose.yml 概述如下),它们运行良好。我希望 docker nginx 对在 localhost:8080 上运行的非 docker 应用程序执行相同的操作,也就是说,我希望 docker nginx 容器运行与 example.com 的连接到 127.0.0.1:8080,其中 127.0.0.1:8080 由运行一个非 docker 应用程序(代码服务器确实是特定的,但这应该无关紧要)
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy
container_name: nginx-proxy
ports:
- "80:80"
- "443:443"
volumes:
- /apps/proxy/conf:/etc/nginx/conf.d
- /apps/proxy/vhost:/etc/nginx/vhost.d
- /apps/proxy/html:/usr/share/nginx/html
- /apps/proxy/dhparam:/etc/nginx/dhparam
- /apps/proxy/certs:/etc/nginx/certs:ro
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: always
letsencrypt:
image: jrcs/letsencrypt-nginx-proxy-companion
container_name: nginx-proxy-le
depends_on:
- nginx-proxy
volumes:
- /apps/proxy/vhost:/etc/nginx/vhost.d
- /apps/proxy/html:/usr/share/nginx/html
- /apps/proxy/dhparam:/etc/nginx/dhparam:ro
- /apps/proxy/certs:/etc/nginx/certs
- /var/run/docker.sock:/var/run/docker.sock:ro
environment:
- NGINX_PROXY_CONTAINER=nginx-proxy
restart: always
networks:
default:
external:
name: nginx-proxy
并且它在 docker 容器上运行良好,当我包含“nginx-proxy”以便它可以检测它们时,很棒的工具。我不能简单地将这样的内容粘贴到 default.conf(nginx 的 conf)中
server {
listen 80;
listen [::]:80;
server_name example.com;
location / {
proxy_pass http://localhost:8080/;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
proxy_set_header Accept-Encoding gzip;
}
}
我的猜测是,对我来说,“本地主机”不是 nginx 的“本地主机”,因为它位于 docker 内(我是这个 docker 的新手,所以我可能在胡说八道)。我看到 issue 他们提到了许多方法,但没有一个对我有用。特别是我尝试按照 CWempe 建议
运行一个虚拟 dockerdocker run -d \
-e VIRTUAL_HOST=foo.bar.com \
-e VIRTUAL_PORT=8080 \
-e UPSTREAM_NAME=webserver.local \
--rm \
cwempe/docker-dummy:latest
这不起作用,nginx 甚至没有检测到它,这让我认为它可能是因为它不在 nginx 网络上,所以我添加了它(为了方便起见,将它变成了 docker-compose)
version: '3.3'
services:
docker-dummy:
environment:
- VIRTUAL_HOST=example.com
- VIRTUAL_PORT=8080
- UPSTREAM_NAME=127.0.0.1
image: 'cwempe/docker-dummy:latest'
networks:
default:
external:
name: nginx-proxy
然后查看 default.conf 我得到
# mydomain.com
upstream mydomain.com {
## Can be connected with "nginx-proxy" network
# code-server_docker-dummy_1
server 172.25.0.7 down;
}
server {
server_name mydomain.com;
listen 80 ;
access_log /var/log/nginx/access.log vhost;
include /etc/nginx/vhost.d/default;
location / {
proxy_pass http://example.com;
}
}
server {
server_name example.com;
listen 443 ssl http2 ;
access_log /var/log/nginx/access.log vhost;
return 500;
ssl_certificate /etc/nginx/certs/default.crt;
ssl_certificate_key /etc/nginx/certs/default.key;
}
所以肯定它已经看到了,但它也认为它已关闭并且根本不包含 VIRTUAL_PORT 并且显然 127.25.0.7 IP 对我来说也没有意义。更改 127.25.0.7 -> 127.0.0.1:8080 没有任何作用。知道如何解决这个问题吗?感谢您提前提供意见。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)