2016-07-12 10 views
4

osx用のドッキング・ビータ(https://beta.docker.com/)をインストールしました。 次は、私は、このファイルdocker-compose.ymlでフォルダを作成:docker-compose up:私は、このコマンドを使用し、後MacでDocker Beta:ipを使用してnginxのコンテナにアクセスできない

web: 
    image: nginx:latest 
    ports: 
    - "8080:80" 

。 コンテナが正常に開始されます。

しかし、問題は私のコンテナにアクセスすることです。私はipが何を使うのか分からない。 私はdocker psdocker inspect ...でIPを検索してみてください。

"Networks": { 
    "bridge": { 
    "IPAMConfig": null, 
    "Links": null, 
    "Aliases": null, 
    "NetworkID": "6342cefc977f260f0ac65cab01c223985c6a3e5d68184e98f0c2ba546cc602f9", 
    "EndpointID": "8bc7334eff91d159f595b7a7966a2b0659b0fe512c36ee9271b9d5a1ad39c251", 
    "Gateway": "172.17.0.1", 
    "IPAddress": "172.17.0.2", 
    "IPPrefixLen": 16, 
    "IPv6Gateway": "", 
    "GlobalIPv6Address": "", 
    "GlobalIPv6PrefixLen": 0, 
    "MacAddress": "02:42:ac:11:00:02" 
    } 
} 

だから私はアクセスにhttp://172.17.0.2:8080/を使用しようとするが、私はERR_CONNECTION_TIMED_OUTエラーが発生しています。 しかし、​​を使用すると、自分のコンテナにアクセスできます。 (ただし、私のlocalhostは私のmacのネイティブ設定で既に使用されていますので、localhostを使用したい場合はネイティブのapacheを停止する必要があります)。

なぜipで動作しないのですか?

答えて

5

@ Javier-Seguraが述べたように、Linux上のネイティブDockerでは、IPアドレスとポート番号を使ってコンテナに衝突する可能性があるので、あなたのケースではhttp://172.17.0.2:80 - 8080ポートはホストIPになります。

Docker for Mac Betaでは、コンテナに同じように動作するようには見えません。これはリリースごとにちょっと変わっていますが、今では従来の方法でipでコンテナに到達できないようです。

残念ながら、OSXの不正が原因で、 をコンテナに、コンテナからホストに戻すことができません。

あなたの最善の策は、言及されていない別の非競合ポートを使用することです。異なる環境で異なるCompose設定ファイルを使用することができます。上の例のように、開発の場合は8081、実動の場合は8080を使用してください。プロダクションでは、docker-compose -f docker-compose.yml -f production.yml up -dのようなものを使ってComposeを開始します。ここで、production.ymlにはその環境のオーバーライドがあります。

1

ポートをマップするとき("8080:80"と同じように)、基本的には、「ローカルホストのポート8080をコンテナの80ポートに転送してください」と言っています。

次にあなたが経由であなたのnginxにアクセスすることができます:ポート8080をすでにお使いのMac上のApacheで使用されている場合は、

あなたの設定を"8081:80"に変更することができ、nginxは利用可能になります8081

0

既に提供されている良いものに追加するヒントです。 -pオプションを使用すると、ポートマッピングに加えてIPマッピングを含めることができます。 IPを含まない場合(-p 8080:80のようなもの)、ポート8080のすべてのインターフェースに入っているトラフィックをドッカーの内部ネットワーク(172.17.0。2あなたの場合)。これには、localhostが含まれますが、これに限定されません。このマッピングを特定のIPのみに適用する場合(たとえば、DHCPを使用してワークステーションに動的に割り当てられたIPの場合)、オプションでIPを-p 10.11.12.13:8080:80(10.11.12.13は架空のIP)と指定できます。次に、localhostまたは他のインタフェースはルーティングされません。

同様に、他のインターフェイストラフィックがドッカーコンテナの172.17.0.2インターフェイスにルーティングされないように、-p 127.0.0.1:8080:80でlocalhostに制限するオプションを使用できます。

0

@pglezenです。作成ファイル内に完全なIPを提供することで問題が解決されます。 イメージdocker-composeによって生成されたIPアドレスは、MAC OSXでは動作しません(現在)。まだアクセス可能ではなかった画像への一般的な172 *のIPアドレスを割り当てられ

nginx: image: nginx:latest ports: - "127.0.0.1:80:80" links: - php-fpm

ドッカ - コン:コンテナ画像へのアクセスを許可するコンファイル内の特定のIPを提供

。しかし実際にハードコードされた127.0.0.1が動作していて、正しいコンテナ応答を返す。

関連する問題