短い説明:
Dockerで実行されているNginx、呼び出しをホストに転送するようにnginxを構成する方法。
長い説明:
いくつかのバックエンドと通信する1つのWebアプリケーションがあります(rest1、rest2、rest3と言います)。私たちはrest1
を担当しています。
私が自分のPCで手動でrest1
を開始し、2345ポートで実行していると考えてみましょう。 nginx(dockerで実行中)がすべての呼び出しtorest1
を自分の実行中のインスタンスにリダイレクトするようにしたい(注:インスタンスはホスト上で実行されており、コンテナーではなく、Docker内ではありません)。そして、rest2
とrest3
を他のDockerノードに送信したり、他のサーバー(気にする人)に送信したりできます。
私が探しているのは:
docker-compose.yml
構成(必要な場合)。前もって感謝します。
Nginxを次のように構成し(DockerホストのIPを必ず置き換えてください)、default.conf
として保存します。
server {
listen 80;
server_name _;
location / {
proxy_pass http://<IP of Docker Host>;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
次にコンテナを起動します。
docker run -d --name nginx -p 80:80 -v /path/to/nginx/config/default.conf:/etc/nginx/conf.d/default.conf nginx
ソリューション1
network_mode: Host
を使用します。これにより、nginxインスタンスがホストのネットワークインターフェースにバインドされます。これにより、複数のnginxコンテナを実行するときに競合が発生する可能性があります。公開されたすべてのポートがホストのインターフェースにバインドされます。
ソリューション2
外の世界に公開したいすべてのサービスに対して、より多くのnginxインスタンスを実行しています。 nginx構成をシンプルに保ち、すべてのnginxをホストにバインドしないようにするには、コンテナー構造を使用します。
dockerhost
-network_mode: Host
のダミーコンテナー
proxy
-ホストサービスへのプロキシとして使用されるnginxコンテナ、
dockerhost
をproxy
にリンクすると、proxy
contianerに/etc/hosts
エントリが追加されます。nginx構成のホスト名として「dockerhost」を使用できます。
docker-compose.yaml
version: '3'
services:
dockerhost:
image: Alpine
entrypoint: /bin/sh -c "tail -f /dev/null"
network_mode: Host
proxy:
image: nginx:Alpine
links:
- dockerhost:dockerhost
ports:
- "18080:80"
volumes:
- /share/Container/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
default.conf
location / {
proxy_pass http://dockerhost:8080;
このメソッドを使用すると、サーバーで実行されているすべてのサービスに対して証明書を自動で生成できます。興味があれば、解決策の要点を投稿できます。
Docker Composeファイルバージョン3を使用している場合は、docker-compose.yml
ファイルの特別な設定はまったく必要ありません。次のように、特別なDNS名Host.docker.internal
を使用してホストサービスにアクセスしますnginx.conf
の例:
events {
worker_connections 1024;
}
http {
upstream Host_service {
server Host.docker.internal:2345;
}
server {
listen 80;
access_log /var/log/nginx/http_access.log combined;
error_log /var/log/nginx/http_error.log;
location / {
proxy_pass http://Host_service;
proxy_set_header Host $http_Host;
proxy_set_header X-Real-IP $realip_remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_http_version 1.1;
proxy_set_header Connection "";
}
}
}