
Я использую 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, к которой привязан контейнер)