[英]Not able to map Nginx Port 80 with docker container port 80
我正在運行一個在端口 4242 上運行的 NodeJS 應用程序,這是 dokefile、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 組成
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 訪問,但我無法正確 map 端口。
編輯:我總是得到端口已經在使用錯誤,因為 Nginx 默認情況下正在偵聽端口 80,而在 docker-compose 中,我將 80 與 4242 映射,其中 Z3254677A7917C6C01F55212F8Z6
提前致謝
您不能在端口 80 上同時擁有 nginx 和 docker 容器。
他們必須監聽不同的端口以避免“端口已在使用錯誤”。
您可以 map 容器端口 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 ,
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.