2017-03-21 13 views
0

ドッカーとの間に問題が発生しました。ドッカーコンテナからホストタイムアウトまでのCurlリクエスト

私はnginxとphpを実行しているドッカー画像を持っています。必要なポートが公開されます。ここでは、イメージを実行するために使用している単純化されたコマンドを示します。

docker run --name php-app -p 80:80 php-app

問題は、インストールのセットアップのために、自分自身へのPHPアプリケーションのカールは、ホストマシンのパブリックIPを使用していることです。単なる一例として

curl http://105.15.25.120/phpsetup.php?setup

このIPは、私は、コンテナ内から他のIPのに成功したカールができ

curl -vvv 105.15.25.120 
About to connect() to 105.15.25.120 port 80 (#0) 
Trying 105.15.25.120... 
Connection timed out 
Failed connect to 105.15.25.120:80; Connection timed out 
Closing connection 0 
curl: (7) Failed connect to 105.15.25.120:80; Connection timed out 

アウトカール回として、コンテナ内部から到達不可能であると思われる、ありませんホストの。

ホストマシンのカールを使用すると問題なく動作します。

簡潔性とテストのために、私は公式のnginxイメージでその動作を再現し、自分のイメージで問題ではないと結論づけました。私の研究から

docker run --name some-nginx -v /some/content:/usr/share/nginx/html:ro -p 80:80

、ルーティングの問題のようですか?わからない。

+0

ホストには、Dockerコンテナからの接続を禁止するファイアウォールルールが設定されている場合があります。特に 'filter'テーブルの' INPUT'チェーンのルールを見直してください。 – larsks

+0

ホストマシンのIPアドレスがコンテナ内部からどのように分かっていますか?コンテナを始めるときにコンテナに提供しますか? – nwinkler

+0

ええ、ENV変数 – Miller

答えて

3

コンテナはホストをカールしてはいけません。あなたがカールしたいコンテンツをホストしているので、カールする必要があります。

curl http://127.0.0.1/phpsetup.php?setup

+0

ご回答ありがとうございます。これは私が尋ねるかもしれない設計によるものですか? – Miller

+1

ベストプラクティスです。コンテナは、ホストやホストの/ on/aboutについて気にする必要はありませんが、自己完結型で実行する必要があります。これに対する例外は、 'docker run'コマンドがコンテナ(データボリューム、環境変数、およびその他のビット)に提供するものです –

+0

カールをホストIPにまだ許可する方法はありますか?私はそれが素晴らしいではないことを理解していますが、PHPアプリケーションのエッジケースをカバーしています。 – Miller

関連する問題