作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 NGINX 在 CentOS 服务器上运行,并且想通过 proxy_pass 来运行在同一主机上运行的 docker 容器。
当使用带有容器 IP 的 proxy_pass 时,它可以工作,但是如果机器重新启动,有时容器的 IP 会发生变化,并且必须手动编辑 nginx.conf 以重新指向容器的新 IP。我知道 NGINX 可以在它自己的 docker 容器中设置并链接到其他正在运行的容器,但这需要很长时间来设置和测试。
有没有办法以某种方式使用容器名称或其他不会直接在主机的 NGINX 上更改的标识符?
最佳答案
I know that NGINX can be setup inside of its own docker container and linked to other running containers but that would take a long time to setup and test.
docker network create --driver=bridge --subnet=192.168.100.0/24 nginx.docker
docker run --net nginx.docker --ip 192.168.100.1 ...
docker-compose.yml
中定义所有服务并确保他们都共享同一个网络或:
docker network create nginx.docker
创建一个 docker 网络docker-compose.yml
您的服务文件nginx.conf
docker-compose.yml
nginx的
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
"80:80"
将绑定(bind)到所有接口(interface),使用接口(interface)的 IP,例如
"192.168.0.1:80:80"
只绑定(bind)到一个特定的接口(interface)。
docker-compose.yml
services:
my_service:
image: image_name
container_name: myservice
networks:
- nginx.docker
networks:
nginx.docker:
name: nginx.docker
external: true
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 ...
}
}
resolver 127.0.0.11
明确告诉 nginx 使用 docker DNS。不确定是否仍然需要它,但我之前在不使用它时遇到了问题。
关于docker - 如何在 Docker 之外将 NGINX 反向代理到 proxy_pass 到 docker 容器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52823279/
我是一名优秀的程序员,十分优秀!