ノード(ExpressJS)アプリケーションのプロキシサーバーとしてnginxのドッキングバージョンを使用しようとしています。コンテナーのnginxと公開ポート80を構成しなくても、デフォルトのnginxランディングページを表示できます。だから私は多くが働いていることを知っています。
これで、proxy_pass localhost:3000
の構成を含むサイト対応のディレクトリをマウントできます。私はノードアプリケーションをローカルで実行しており(Dockerコンテナーではありません)、ポート3000(つまりlocalhost:3000
)を介してアクセスできます。ただし、nginxコンテナーが実行され、ポート80にマップされ、私のlocalhost:3000をプロキシすると、veryを表示できると想定しますシンプルな(Hello World)アプリケーション。代わりに、502を受け取ります。
何かをドッカーに渡す必要がありますか?これはおそらくnginx設定エラーですか?これが私のnginx設定です:
server {
listen 0.0.0.0:80;
server_name localhost;
location / {
proxy_pass http://localhost:3000;
}
}
この質問 を使用してみましたが、役に立たなかったようです。それは私が何か間違ったことをしていない限りです。
次のように、現在のIPアドレスを取得できます ここ :
ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}'
次に、--add-Host
フラグとdocker run
:
docker run --add-Host localnode:$(ifconfig en0 | grep inet | grep -v inet6 | awk '{print \$2}') ...
proxypass
では、localnode
の代わりにlocalhost
を使用してください。
Docker-for-mac 18.03以降を使用している場合は、特別なDNSエントリが自動的に作成されますHost.docker.internal
ホストのinet ipに動的にバインドします。次に、dns名を使用して、localhost
の代用として、コンテナー内からホストマシンで実行されているサービスをプロキシできます。
つまり、nginx設定ファイル:
server {
listen 0.0.0.0:80;
server_name localhost;
location / {
proxy_pass http://Host.docker.internal:3000;
}
}
はい。 Dockerはホストマシンについて知る必要があります。 --add-Host
スイッチを使用してエイリアスを設定できます。 「localbox」という名前のエイリアスを作成する* nixボックスでは、次のようになります。
docker run my_repo/my_image --add-Host=localbox:<Host_name>`
Boot2dockerでは、次のようになります。
docker run my_repo/my_image --add-Host=localbox:192.168.59.3`
ここで、「192.168.59.3」を、boot2docker ip
が返すものに置き換えます。
次に、常にエイリアスlocalboxを介してホストマシンにアクセスする必要があるため、nginx構成を次のように変更します。
location / {
proxy_pass http://localbox:3000;
}