2017-03-21 11 views
2

現在、私はドッカーコンテナで使用する既存のプロジェクトをリメイクするプロジェクトに取り組んでいます。 私は3個の異なるコンテナを有する:Docker(compose)とsocket io - コンテナをリンクする方法

  • ポート3001にsocket.io接続を開き、ウェブページを提供していnodejsサーバ(また、そのsocket.ioサーバに接続すること)ポート3000
  • にMySQLデータベースをそれはnodejsバックエンド
  • サーバーにsocket.ioを介してデータを送信する小さなアプリケーションのために必要とされる今

私はちょうど右のドッキングウィンドウのネットワークを理解している場合、私はこれらのコンテナをリンクしようとしていますが、私はわかりません。

  • ポート:ホストコンピュータに(?および他のすべての/すべてのリンクされたコンテナに)ポートを公開
  • リンク:私は、右のドッキングウィンドウ-compose.ymlファイルであることを想定した中で午前のスタート順を設定し、

は、だから私は常にリンクし、公開しているすべてのリンクされた容器のみ(ないホストではなく、リンクされていないコンテナ)にポートを公開しますと

  • が公開containername =ユーザーanothersに一つの容器さらさポート、ホスト名を許可?これは常に両方の方向で機能しますか(socket.ioメッセージも返信することができます)?

    だから、このようなものは(バージョン3フォーマット)右のようになります。

    nodeserver: 
        ports: 
         -3000:3000 
        expose: 
         -3001 
        links: 
         -database 
        ... 
    
    database: 
        (image mysql...) 
    
    application: 
        links: 
         -nodeserver 
        ... 
    

    は、アプリケーションとWebページは現在nodeserverとしてsocket.ioサーバに達することができるの両方:3000を?

    私はこれをすでに試してみましたが、完全に機能していないので、まずすべてを理解したかったのです。 ご協力いただきありがとうございます!

  • 答えて

    2

    私はあなたの展開アーキテクチャを理解している場合は、アプリケーションにnodeserverとリンクを追加するので、applicationは、ポート3001上でsocket.ioを経由してアクセスnodeserverを必要とし、それが正しいのです。

    しかしnodeserverは、ポート3001上でsocket.ioに接続Webページを提供するので、ブラウザはあなたが同じように以下のnodeserverを変更する必要があるポートに3001

    をnodeserver結ぶことはできません。

    nodeserver: 
    ports: 
        - "3000:3000" 
        - "3001:3001" 
    links: 
        -database 
    ... 
    

    リンク:

    別のサービスのコンテナへのリンク。サービス名とリンク別名(SERVICE:ALIAS)の両方を指定するか、サービス名だけを指定してください。

    リンクされたサービスのコンテナには、エイリアスと同じホスト名またはエイリアスが指定されていない場合はサービス名でアクセスできます。

    ポート:

    ポートを公開。両方のポート(HOST:CONTAINER)またはコンテナポート(ランダムなホストポートが選択されます)のどちらかを指定します。

    公開:

    は、ホストマシンにそれらを公開せずにポートを公開する - 彼らは唯一のリンクされたサービスにアクセスできます。内部ポートのみ指定できます。

    は詳細をご覧ください:https://docs.docker.com/compose/compose-file

    +0

    ありがとうございました! Webページが実際のホスト上で動作するので、ここではエクスポーズではなくポートが必要です。それがコンテナ内で実行されていた場合は、公開されているだけでした! 一般に、「リンク」はポートと一緒にしか使用できないか、公開することはできますか? – CodeO

    +0

    @CodeO 'links'を使う方法に制限はなく、' links'はターゲットサービスのエイリアスをコンテナに追加するだけです。あなたは 'docker-compose exec nodeserver cat/etc/hosts'コマンドで' hosts'ファイルを見ることができます。私は 'ports'と' expose'の投稿を更新しました。 – Shawyeok

    +0

    ありがとう、私はこの答えを受け入れました(私はdocu myselft;を読んでいますが))。あなたはいつでも依存関係を助けるかもしれない 'links'をいつでも使うことができますが、ポート/エクスポーズなしでは、他のコンテナから何かにアクセスすることはできません。 – CodeO

    関連する問題