Val*_*Val 6 reverse-proxy nginx docker docker-compose
我有一个在 CentOS 服务器上运行的 NGINX,并希望通过 proxy_pass 运行在同一主机上运行的 docker 容器。
当使用 proxy_pass 和容器的 IP 时它可以工作,但是如果机器重新启动有时容器的 IP 会发生变化,并且必须手动编辑 nginx.conf 以重新指向容器的新 IP。我知道 NGINX 可以在它自己的 docker 容器内设置并链接到其他正在运行的容器,但这需要很长时间来设置和测试。
有没有办法以某种方式使用容器名称或其他不会直接在主机的 NGINX 上更改的标识符?
我知道 NGINX 可以在它自己的 docker 容器内设置并链接到其他正在运行的容器,但这需要很长时间来设置和测试。
如果你不想在它自己的容器中运行 nginx,你可以创建一个具有固定 IP 范围的 docker 网络:
docker network create --driver=bridge --subnet=192.168.100.0/24 nginx.docker
Run Code Online (Sandbox Code Playgroud)
并使用固定 IP 启动您的容器
docker run --net nginx.docker --ip 192.168.100.1 ...
Run Code Online (Sandbox Code Playgroud)
请参阅docker network create and Assign static IP to Docker container
但我仍然建议在容器中运行 nginx,然后 docker 将负责 DNS 解析和路由。它实际上很快就完成了,而且非常简单。您可以在一个中定义所有服务docker-compose.yml并确保它们都共享同一个网络,或者:
docker network create nginx.dockerdocker-compose.yml您的服务文件中nginx.conf例如:
该docker-compose.ymlNginx的
services:
nginx:
image: nginx:alpine
container_name: nginx
ports:
- "80:80"
- "443:443"
volumes:
- type: bind
source: ./nginx.conf
target: /etc/nginx/nginx.conf
networks:
- nginx.docker
networks:
nginx.docker:
name: nginx.docker
external: true
Run Code Online (Sandbox Code Playgroud)
请注意,"80:80"将绑定到所有接口,使用接口的 IP,例如"192.168.0.1:80:80" 仅绑定到一个特定接口。
docker-compose.yml
services:
my_service:
image: image_name
container_name: myservice
networks:
- nginx.docker
networks:
nginx.docker:
name: nginx.docker
external: true
Run Code Online (Sandbox Code Playgroud)
在您的服务器部分nginx.conf:
server {
listen 443 ssl;
server_name your.server.name;
# Docker DNS
resolver 127.0.0.11;
set $upstream_server http://myservice:8080; # or myservice.nginx.docker
location / {
proxy_pass $upstream_server;
# further proxy config ...
}
}
Run Code Online (Sandbox Code Playgroud)
请注意resolver 127.0.0.11明确告诉 nginx 使用 docker DNS。不确定是否仍然需要它,但是我以前在不使用它时遇到了问题。
| 归档时间: |
|
| 查看次数: |
7338 次 |
| 最近记录: |