
我在虛擬機器中運行 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 之間沒有路由)容器鏈接到的網路)