VMWare Ubuntu - 如何在 Ubuntu 中访问 Docker 容器同时运行 nginx

VMWare Ubuntu - 如何在 Ubuntu 中访问 Docker 容器同时运行 nginx

我在虚拟机中运行 Ubuntu 22.04.3 LTS。我安装了 Nginx,端口为 80。

当访问http://localhost:80时,Nginx可以显示正常网站。

然后我安装了docker和两个镜像。我在端口9000上授予了镜像API访问权限。

但是访问http://localhost:9000的时候就报错,在postman中访问是404。

看来我需要在 Nginx 中链接或允许端口 9000,或者将来自 docker 的访问链接到该端口。

我无法找到如何在 Nginx 中允许更多端口或如何链接在端口 9000 中公开的容器。这是它在 docker 中显示的图像:

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;
       }
}

如果我在 postman 中运行 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>

然后,将 http://localhost:9000 替换为容器的 ip。它可能无法工作,因为 docker 网络(启动容器时自动创建)无法从主机访问(如果我错了,请纠正我,但默认情况下,主机操作系统的主网络和容器链接到的 docker 网络之间没有路由)

相关内容