VMWare Ubuntu — как получить доступ к контейнеру Docker в Ubuntu, одновременно запустив nginx

VMWare Ubuntu — как получить доступ к контейнеру Docker в Ubuntu, одновременно запустив nginx

Я использую Ubuntu 22.04.3 LTS на виртуальной машине. Я установил Nginx с портом 80.

При доступе к http://localhost:80 Nginx отображает обычный веб-сайт.

Затем я установил docker и два образа. Я дал образу доступ к API на порту 9000.

Но при доступе к http://localhost:9000 выводится ошибка. При доступе в postman выдается 404.

Похоже, мне нужно связать или разрешить порт 9000 в Nginx, или связать доступ из 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;
       }
}

Если я запускаю GET в postman: 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 вы заменяете localhost на ip контейнера. Это может не сработать, так как сеть docker (автоматически созданная при запуске контейнера) недоступна с хоста (поправьте меня, если я ошибаюсь, но по умолчанию нет маршрутизации между основной сетью операционной системы хоста и сетью docker, к которой привязан контейнер)

Связанный контент