2016-07-03 24 views
1

いくつかのコンテナは、本番環境でWebサーバ(PHP、NodeJS)を実行しています。我々はNodeJSコンテナの例を取る場合ホストマシンでDockerコンテナにアクセスできない

が、これは私はを通じて自分のWebアプリケーションにアクセスすることができるよ、この構成では、その構成

ドッキングウィンドウ-compose.yml

version: '2' 
services: 
    webapp: 
    build: . 
    volumes_from: 
    - data 
    links: 
    - db:db 
    - redis:redis 
    ports: 
     - '8080:3000' 
    restart: always 

    ... 

ですhttp://example.com:8080/が、私はNを持って

$ curl localhost:8080 
(Time-out) 

と私のホストマシン上でアクセスすることはできませんこの構成では、私のホスト上の会社はGinxサーバー:

example.com.conf

upstream webapp { 
    server 127.0.0.1:8080; 
} 

server { 
    listen 80; 
    listen [::]:80; 

    server_name example.com; 

    location/{ 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header HOST $http_host; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-NginX-Proxy true; 
    proxy_redirect off; 

    proxy_pass http://webapp; 
    } 

} 

しかしhttp://example.com/に加盟は504ゲートウェイタイムアウトを投げます。

私はまだここに私docker-compose.yml'127.0.0.1:8080:3000'によって問題でポート設定を変更しようとしたがhttp://example.comにアクセスすることはできません(とhttp://example.com:8080が、それは私が望む結果である)場合。

これは非常に奇妙で、私は新鮮なサーバで私のアプリケーションを動かすことに問題はありません。 私はこの問題の根本を探しています。

ご協力いただきありがとうございます。

EDIT:

$ netstat -tunlp 
Active Internet connections (only servers) 
Proto Recv-Q Send-Q Local Address   Foreign Address  State  PID/Program name 
tcp  0  0 127.0.0.11:59712  0.0.0.0:*    LISTEN  -    
udp  0  0 127.0.0.11:33293  0.0.0.0:*       -    

Webサーバーがポート3000でリッスンする必要がありますが、私は、サーバーも実行されている

$ docker-compose logs 
webapp_1 | Express server listening on port 3000 in production mode 

...

$ docker port webapp_1 
3000/tcp -> 127.0.0.1:8080 
+1

これは 'curl http://example.com:8080 /'ではないはずですか? – stacksonstacks

+0

Docker Machineを使用していますか? –

+0

@stacksonstacks:私のコンテナは、Nginxを使ってパブリックドメイン上でのみローカルとリダイレクトでアクセスできるようにしたい。 –

答えて

0

編集があります。このあなたはそれを持っている方法に似て動作するはずです、あなたは変更しようとしました: proxy_set_header HOST $http_host;あなたのnginx設定で〜 proxy_set_header HOST $host;

Docker Composeファイルにnginxを入れて、Composeが独自のネットワークを使用できるようにすることができます。別のネットワークにアイテムを追加する場合は、カスタムネットワークを指定することができます。https://docs.docker.com/compose/networking/

その他の場合は、ホストのifconfigなどの出力を見て、どのIPとネットワークが使用していてホストは聴いている。

+0

私はそれが良い習慣であるかどうかわかりません、私はそれぞれのコンテナを分離し、それらをローカルで実行し、ホスト上のNginxでプロキシすることによって外部トラフィックを許可することを好みます。 –

+0

あなたのセットアップに応じて、あなたのnginxの問題をより具体的に解決するために私の答えを編集しました。それが原因かもしれません。 Dockerの議論は非常に大きなものですが、確かにDockerのすべての機能を移植性の高いものにすることがベストプラクティスですが、ソリューション固有のものです。私は実際に両方の方法を使用しています、私はちょうどそれらを混合するときに作成を使用することは起こりませんが、あなたはできないはずの理由はありません。 – ldg

+0

私はすでにこの設定を変更しようとしましたが、Nginx設定の問題ではないと思います。 –

関連する問題