VMWare Ubuntu - 如何在執行 nginx 的同時存取 Ubuntu 中的 docker 容器

VMWare Ubuntu - 如何在執行 nginx 的同時存取 Ubuntu 中的 docker 容器

我在虛擬機器中運行 Ubuntu 22.04.3 LTS。我安裝了 Nginx,連接埠為 80。

當造訪http://localhost:80時,Nginx顯示正常的網站。

然後我安裝了 docker 和兩個映像。我在連接埠 9000 上授予了圖像 API 存取權限。

但造訪http://localhost:9000時,卻顯示錯誤。在 postman 中訪問會返回 404。

看來我需要在 Nginx 中連結或允許連接埠 9000,或將 docker 的存取連結到該連接埠。

我無法找到如何在 Nginx 中允許更多連接埠或如何連結連接埠 9000 中公開的容器。

0.0.0.0:9000->9000/tcp, :::9000->9000/tcp  

執行伺服器的步驟:

cd /etc/nginx/sites-enabled
sudo "${EDITOR:-vi}" docker
server {
       listen 80;
       listen [::]:80;

       server_name example.ubuntu.com;

       root /var/www/docker;
       index index.html;

       location / {
               try_files $uri $uri/ =404;
       }
}

如果我在郵差中執行 GET:http://localhost:9000/kalum-management/v1/jornadas 它應該回傳資料。由於某種原因,對 Docker 和 Nginx 的混淆變得混亂起來,不知道如何將 docker 暴露到連接埠 9000。

答案1

Docker 建立自己的網路和網路介面卡。執行容器時,您可以使用選項 network_mode host 能夠從主機作業系統連接到容器所連結的 docker 網路。我建議使用 docker compose,我也會向您展示一個範例 docker-compose 來發布更多端口

version: '3'

    services:
      your_service_name:
        container_name: your_container_name
        image: your_image_name
        network_mode: host
        volumes:
          - /path/on/host:/mnt

請記住,您不能同時使用公用連接埠和網路模式主機。

將此檔案保存在目錄中作為 docker-compose.yml ,然後運行它docker-compose up -d


選項2

或使用以下命令找出容器的 IP 位址

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' <container_name_or_id>

然後用容器的 IP 取代 localhost,而不是 http://localhost:9000。它可能不起作用,因為 docker 網路(啟動容器時自動建立)無法從主機存取(如果我錯了,請糾正我,但預設情況下,主機作業系統的主網路和 docker 之間沒有路由)容器鏈接到的網路)

相關內容