簡體   English   中英

無法 map Nginx 端口 80 與 docker 容器端口 80

[英]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替換為您的真實服務器名稱。
  • 重新加載 nginx

最后你有:

  1. nginx(直接在主機上)監聽80端口,
  2. 具有基本身份驗證的location塊,
  3. 將流量轉發到主機端口 4242,
  4. 它使用proxy_pass映射到 docker 容器端口 4242 ,
  5. 最后點擊你的 NodeJS 應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM