2017-02-22 6 views
2

私は2つの異なるイメージに基づいて2つのドッカーコンテナを作成しました。 1つはdb、もう1つはwebserverです。両方のコンテナが私のmac osx上で動作しています。別の別のコンテナからドッカーコンテナにアクセスする

私はホストマシンからdbコンテナにアクセスでき、同様にホストマシンからウェブサーバーにアクセスできます。

ただし、Webサーバーからdb接続にアクセスするにはどうすればよいですか?

私は、DBコンテナを開始した方法は

ドッカ実行--nameオラクル、DB -p 1521:1521 -p 5501:5500のOracle /データベース:12.1.0.2-EE

私は、WLSコンテナを開始しました7001 WLS-画像::7001 -p ドッキングウィンドウの実行--nameオラクル-WLSとして1521/ORCLCDB

:最新

私は SQLPLUSスコット/ welcome1を@ // localhostに接続することにより、ホスト上のDBにアクセスすることができます私はとしてホスト上のwlsにアクセスできますhttp://localhost:7001/console

+0

ウェブコンテナとdbコンテナの両方がホストマシン上にありますか?もしそうなら、使用しているドッカーのバージョンは?古いバージョンのdockerには1つの方法がありましたが、新しいバージョンには異なる方法がありました。ドッカーの作成も可能ですか?それは簡単になりますが、私はあなたが使用できない方法を使って答えを与えたくありません。 – Caperneoignis

答えて

1

最も簡単な方法--linkを使用することです。しかし、新しいバージョンのdockerはそれから離れており、実際にスイッチはすぐに削除されます。

以下のリンクは、2つのコンテナを接続する際に便利です。添付部分はスキップすることができます。これは、画像に項目を追加するのに便利な方法です。

https://deis.com/blog/2016/connecting-docker-containers-1/

興味がある部分は、二つの容器の間の通信です。最も簡単な方法は、Webサーバーコンテナから名前でDBコンテナを参照することです。

例:

あなたはデシベルコンテナDB1とウェブサーバコンテナWEB0という名前

。コンテナは両方ともブリッジネットワーク上にある必要があります。つまり、Webコンテナがその名前を参照してDBコンテナに接続できる必要があります。

アプリのWeb設定ファイルがある場合、DBホストの場合はDB1という名前を使用します。

古いバージョンのドッカーを使用している場合は、 - linkを使用する必要があります。

例:

手順1:その後、

あなたがウェブアプリを起動。使用:

ステップ2:docker run --name web0 --link db1 webapp/webapp:3.0

とウェブアプリはDBにリンクされます。しかし、私が言ったように--linkスイッチはすぐに削除されます。

代わりにドッカーを使用して、ネットワークを構築します。しかしながら;あなたのシステム用のdocker composeをダウンロードする必要があります。 https://docs.docker.com/compose/install/#prerequisites

と例のセットアップは、このようなものです:

ファイル名は、これは私が私のトップをオフに思い出すことができない、ネットワークに一般的な名前を命名します

version: "2" services: webserver: image: "moodlehq/moodle-php-apache:7.1 depends_on: - db volumes: - "/var/www/html:/var/www/html" - "/home/some_user/web/apache2_faildumps.conf:/etc/apache2/conf-enabled/apache2_faildumps.conf" environment: MOODLE_DOCKER_DBTYPE: pgsql MOODLE_DOCKER_DBNAME: moodle MOODLE_DOCKER_DBUSER: moodle MOODLE_DOCKER_DBPASS: "[email protected]" HTTP_PROXY: "${HTTP_PROXY}" HTTPS_PROXY: "${HTTPS_PROXY}" NO_PROXY: "${NO_PROXY}" db: image: postgres:9 environment: POSTGRES_USER: moodle POSTGRES_PASSWORD: "[email protected]" POSTGRES_DB: moodle HTTP_PROXY: "${HTTP_PROXY}" HTTPS_PROXY: "${HTTPS_PROXY}" NO_PROXY: "${NO_PROXY}"

base.ymlですあなたが--nameスイッチを使用しない限り、その名前が何であるかを頭に入れます。

IE docker-compose --name setup1 up base.yml

注:--nameスイッチを使用する場合は、あなたがドッキングウィンドウのコンを呼び出すときに、それを使用する必要がありますので、docker-compose --name setup1 downこれはあるので、あなたはWebサーバとDBのより、その後のインスタンスを持つことができ、この場合、docker composeはコマンドを実行するインスタンスを知っています。一度に複数のランを実行することもできます。同じサーバーでテストを並行して実行している場合は、CI/CDに最適です。

ドッカーもそう docker-compose --name setup1 exec webserver do_some_command

最良の部分は、あなたはユニットテストのためのdbのまたはそのような何かを変更したい場合は、アップコマンドに追加.ymlファイルを含めることができ、あるとドッキングウィンドウと同じコマンドを持って構成しますそれは類似の名前を持つ項目を上書きしますが、私はそれをキー=>値の置き換えと考えています。

例:

db.yml

version: "2" services: webserver: environment: MOODLE_DOCKER_DBTYPE: oci MOODLE_DOCKER_DBNAME: XE db: image: moodlehq/moodle-db-oracle

、これはデシベルを上書きしますdocker-compose --name setup1 up base.yml db.yml

を呼び出します。別の設定で。各コンテナからこれらのサービスに接続する必要がある場合は、サービスで設定された名前(この場合はwebserverとdb)を使用します。

私はあなたのケースで実際にはもっと便利な設定かもしれないと思います。必要なすべての変数をymlファイルに設定して、起動が必要なときにdocker composeのコマンドを実行するだけで済みます。だからそれをもっと始めるとセットアップを忘れる。

注:コンテナとコンテナ間の通信にポートを公開する必要はないので、--portコマンドは使用しませんでした。ホストがコンテナに接続するか、ホストの外部からアプリケーションに接続する場合にのみ必要です。ポートを公開すると、そのポートはホストが許可するすべての通信に開放されます。したがって、ポート80でWebを公開することは、物理ホスト上でWebサーバーを起動する場合と同じで、ホストが許可している場合は外部接続を許可します。また、何らかの理由で複数のWebアプリケーションを同時に実行したい場合は、ポート80を公開すると、そのポートで公開しようとすると追加のWebアプリケーションを実行できなくなります。したがって、CI/CDの場合、ポートを一切公開しないことが最善です。また、ドッカーが--nameスイッチを使用して作成すると、すべてのコンテナが自分のネットワーク上にあり、衝突することはありません。だから、あなたはかなりたくさんの容器を持っています。

2

あなたは、ホストマシンのIP経由のDBにアクセスする必要があります、またはあなたがローカルホスト経由でアクセスする場合:1521、その後、同様にウェブサーバの実行 -

docker run --net=host --name oracle-wls wls-image:latest 

See here

+0

ホストマシンのipが実行中のマシンコンテナに基づいて変更されるため、実際にどのように動作しますか? – Vik

+1

これは、マシンが静的IPまたはDNSを持っている場合にのみ有効です。そうでない場合は、2番目の方法に進みます。 – xitter

+0

私はこれに問題があるようです。私の正確な実行コマンドは次のとおりです。docker run --name ora-tools-wls -it -p 7001:7001 orawls これが動作し、http:// localhost:7001/consoleとしてこのサーバー上で動作するサーバーにアクセスできます。 ただし、サーバーからのdbアクセスは、DBを実行している別のコンテナに到達するためには正確なIPが必要です。 私が行った場合 ドッカー実行 - 名前ora-tools-wls -it -p 7001:7001 --network = "host" orawls あなたが言及したものの、サーバーはlocalhostでIPにアクセスできますが、アクセスできますホストマシンブラウザのサーバーが失敗します。 – Vik

関連する問題