我正在尝试设置一个 nginx 映像,该映像根据 URL 将请求重定向到服务端口。我正在使用 docker-compose,这是我的 docker-compose.yml:
version: '3.3'
services:
nginx:
image: nginx:latest
build: .
container_name: nginx
depends_on:
- service-1
ports:
- "80:80"
service-1:
image: dockerhub/image:latest
container_name: service-1
ports:
- "8080:8080"
restart: on-failure
用于构建nginx的dockerfile包含以下内容:
FROM nginx:latest
COPY ./nginx-html-template/ /usr/share/nginx/html/
COPY ./nginx.conf /etc/nginx/conf.d/nginx.conf
EXPOSE 80
CMD ["nginx", "-g", "daemon off;", "-c", "/etc/nginx/nginx.conf"]
最后但同样重要的是 nginx.config:
server {
listen [::]:80;
listen 80 default_server;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ =404;
}
location /service-1 {
proxy_pass http://service-1:8080/;
}
}
如果我点击 localhost/service-1,我期望 nginx 将请求重定向到端口 8080。但我得到的是 404。如果我点击 localhost:8080,那么它工作正常。我做错了什么?提前致谢
答案1
尝试像这样修改它:
location /service-1/ {
proxy_pass http://127.0.0.1:8080/;
}
答案2
如果您使用 docker compose,则不需要为 service-1 映射端口(除非您希望它独立于 nginx 服务器可访问),但需要在 nginx 服务描述中添加以下元素docker-compose.yml
:
links:
- service-1
那么一切都会顺利进行。
事情是通过链接块 docker compose 为 nginx 容器建立内部名称解析,然后当您使用“service-1”作为主机时,它会将其路由到另一个容器。