我在虚拟机中运行 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 网络之间没有路由)