我正在运行一个在端口 4242 上运行的 NodeJS 应用程序,这里是 dockefile、docker-compose 和 nginx conf 看起来像这样
Dockerfile
FROM node:12-alpine
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
EXPOSE 4242
CMD node index.js.
Docker Compose
services:
web:
build: .
ports:
- "80:4242"
environment:
DATABASE_URL: <DB_URL>
depends_on:
- db
command: >
npm run start"
NGINX
server {
listen 80;
server_name server_name;
location / {
try_files $uri $uri/ =404;
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:80;
}
}
我想通过 Nginx 端口 80 以及端口 80 上的基本身份验证访问此应用程序,但我无法正确映射端口。
编辑:我总是收到端口已在使用错误,因为默认情况下 Nginx 正在侦听端口 80 而在 docker-compose 中,我将 80 与 Dockerfile 公开的 4242 进行映射
提前致谢
答案 0 :(得分:0)
您不能在端口 80 上同时拥有 nginx 和 docker 容器。
他们必须侦听不同的端口以避免“端口已被使用错误”。
您可以将容器端口 4242 映射到主机端口 4242:在 docker-compose 文件中将 - "80:4242"
替换为 - "4242:4242"
。
用docker-compose restart web
重启你的容器,你可以用docker-compose ps
检查你的容器是否正在运行(你会同时看到映射的端口)
然后,您必须相应地更改 nginx conf:
server {
listen 80;
server_name your_server_name;
location / {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:4242;
}
}
注意事项:
try_files
,因为它绕过了 proxy_pass
指令。如果您尝试使用 try_files
实现其他目的,请提供上下文。your_server_name
替换为您的真实服务器名称。最后你有:
location
具有基本身份验证的块,proxy_pass
映射到 docker 容器端口 4242,