web-dev-qa-db-ja.com

nginx Dockerコンテナーでlocalhost上のサーバーにアクセスするにはどうすればよいですか?

ノード(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;
  }
}

この質問 を使用してみましたが、役に立たなかったようです。それは私が何か間違ったことをしていない限りです。

18
adam-beck

次のように、現在の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を使用してください。

12
Abdullah Jibaly

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;
  }
}
22
digitaldreamer

はい。 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;
} 
4
Eli