2017-06-17 13 views
1

全体:I do not私のdjangoアプリケーションが私のdbとしてドッカーのコンテナに頼るようにします。私は画像Docker:dbドッカーのコンテナではなくローカルのdbに頼る方法は?

docker run -p 8000:8000 -d imagename

を実行するときに、他の言葉で、私はこれが私のローカルDBに接続するために知ってほしいです。私は私のsettings.pyはPGのDBに接続するように設定されているので、私は

python manage.py runserver

任意の特定の用語の誤った使用またはちょうど私の全体的な理解を呼び出すこと自由に感じのような何かをするときすべてが正常ですドッカー。だから私が見たすべてのチュートリアルでは、彼らは通常、ドッカーがdb画像に依存しているファイルを作成し、コンテナにWebアプリケーションから別のを書き出します。私が行ったことの例: https://docs.docker.com/compose/django/#connect-the-databasehttp://ruddra.com/2016/08/14/docker-django-nginx-postgres/などこの時点で私は私のDockerfile、settings.py、またはdocker-composeでこれを行うかどうか分からないので、 .yml(これは私が避けようとしているマルチコンテナアプリ用のものなので、私はこれを持ってはいけないと思っています)。 [別名:最後に、ちょうど1つの容器にセロリー& rabbitmqに依存しているジャンゴアプリを実行できますか?私のpgの例のように、私はそれらをすべて別々のコンテナに入れているインスタンスしか見ることができません。]私のDockerfileに関しては、これはかなりです。あなたのコンテナDjangoアプリケーションがローカル・データベースは、ホスト・マシンで実行しているに接続できるようにするために

FROM python:3 
ENV APP 'http://githubproj` 
RUN git clone $APP \ 
&& cd $APP/projectitself \ 
&& pip install -r requirements.txt 
CMD cd $APP_DIR/mydjangoproject && gunicorn mydjangoproject.wsgi:application --bind 0.0.0.0:8000 
+1

DBはドッキングホストまたはリモートマシン上にありますか? – johnharris85

+0

@ johnharris85。だから私は自分のローカルマシンでやろうとしていますが、最終的な目標はdbをホストするリモートマシンにアクセスすることです。私の理解から、私はpostgresイメージを実行しているコンテナを持っていないでしょう。 – chris123

答えて

0

は、あなたのドッキングウィンドウのインターフェースからの着信接続を有効にする必要があります。

$ sudo iptables -A INPUT -i docker0 -j ACCEPT 

次に、あなたが複数のアドレスをリッスンするためにあなたのPostgresサーバを設定する必要があります。あなたは、ローカルマシンにあなたのiptablesで次のルールを含めることによって、それを行います。 /etc/postgresql/<version>/main/postgresql.confを開き、listen_addresses='localhostを含む行を検索し、ためにそれを変更します。

listen_addresses='*' 

をこれらの変更したあと、コンテナ内から、ローカルのpostgresデータベースに接続することができるはずです。

This答えは、あなたのコンテナからローカルマシンに接続する方法をさらに明確にするかもしれません。

+0

MySQLデータベースはどうですか?これと同じアプローチが有効でしょうか? –

0

コンテナからホストに接続するには、docker0ブリッジのIPアドレスを使用できます。ホスト上でifconfigを実行して、docker0のIPアドレスを見つけてください(デフォルトは172.17.0.1と思います)。それからあなたのコンテナの中から接続します。

これは明らかにスーパーホストポータブルではないため、IPがマシン間で変更される可能性があるため、ラッパースクリプトがそのIPを見つけてコンテナに挿入すると便利です。

さらに、ポストグルをコンテナに入れてください! :p

また、リモートポストグルに接続している場合は、リモートインスタンスのIPを提供するだけです(ここでの定期的な相互接続とは異なりません)。

関連する問題