VMWare Ubuntu - Ubuntu で nginx を実行しながら Docker コンテナにアクセスする方法

VMWare Ubuntu - Ubuntu で nginx を実行しながら Docker コンテナにアクセスする方法

仮想マシンで Ubuntu 22.04.3 LTS を実行しています。ポート 80 で Nginx をインストールしました。

http://localhost:80 にアクセスすると、Nginx によって通常の Web サイトが表示されます。

次に、docker と 2 つのイメージをインストールしました。ポート 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 の代わりに、localhost をコンテナの IP に置き換えます。docker ネットワーク (コンテナの起動時に自動的に作成されます) がホストからアクセスできないため、機能しない可能性があります (間違っていたら訂正してください。デフォルトでは、ホスト オペレーティング システムのメイン ネットワークとコンテナがリンクされている docker ネットワークの間にルーティングはありません)

関連情報