【发布时间】:2019-03-11 19:04:21
【问题描述】:
我正在尝试将以下 Nginx 反向代理配置烘焙到 docker 映像中:
server {
listen 80;
server_name 203.0.113.2;
proxy_set_header X-Real-IP $remote_addr; # pass on real client IP
location / {
proxy_pass http://203.0.113.1:3000;
}
}
我目前只是将它放入一个卷中并像这样映射它:
-v nginx-data:/etc/nginx/conf.d/
这很有效,它在启动时容器作为反向代理执行,但是当我像这样烘烤它时:
Dockerfile
FROM nginx
COPY gogs.conf /etc/nginx/conf.d/gogs.conf
像这样从镜像启动容器:
docker run --name gogs-nginx-container -d gogs-nginx
最后在其分配的 IP 地址http://172.17.0.3/ 访问它,我只是得到“欢迎来到 Nginx”页面,而不是看到它并没有重定向到 203.0.113.1:3000。
在运行docker logs gogs-nginx-container 时,它只告诉我我尝试连接响应代码,即 304s。我正在将配置复制到我在运行 vanilla nginx 映像时安装它的同一位置,所以它应该可以工作......
关于如何解决此问题的任何想法?
【问题讨论】:
-
在 /etc/nginx/nginx.conf 中引用的任何其他文件中是否有任何其他服务器块?
-
IIUC 当我执行
COPY gogs.conf /etc/nginx/conf.d/gogs.conf时,这与执行-v nginx-data:/etc/nginx/conf.d/相同,因为nginx-data卷包含相同的gogs.conf文件,所以最终使用 docker 构建的图像文件应该等同于以挂载卷启动的容器... -
像您发布的单个服务器块只是完整 Nginx conf 的一部分,并且由于它没有处理您的请求,因此我怀疑还有另一个服务器块硬编码或通过其他地方的包含引用在您的配置中,必须改为处理请求
-
好吧,我可以理解为什么你的第二个例子不起作用,但我不明白为什么第一个例子起作用。您的容器是否总是获得 IP
203.0.113.2? -
是的 - 我设置了一个 docker 本地网络,以便容器始终获得相同的 IP。
标签: bash shell docker nginx dockerfile