2017-11-07 2 views
1

私は多くの回答をしましたが、この問題は解決できませんでした。私がドッカーコンテナを動かすためにできることを教えてください。フラスコを走らせた直後にドッキングコンテナが出る

のNeo4jは、ドッキングウィンドウのコンテナであり、フラスコのアプリがローカルであるとき、私はフラスコDB.ItのためのNeo4jのドッキングウィンドウの画像を利用しているアプリ正常に動作しますがあります。

は、ここに私のセットアップです。私はそれをドッカーのイメージにするために私のFlask Appを構築する必要があります。最後に、AWSにこのアプリケーションをデプロイします。

Dockerイメージとしてアプリケーションを作成しましたが、実行しようとするとすぐに終了します。

CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS      PORTS              NAMES 
eb7f66ffdaa2  re     "python app.py"   2 hours ago   Exited (1) 2 hours ago                 sad_curie 
a9a02c84ef9a  re     "python app.py"   2 hours ago   Exited (1) 2 hours ago                 re 
5b55004697f6  neo4j    "/docker-entrypoin..." 2 hours ago   Up 2 hours     0.0.0.0:7474->7474/tcp, 7473/tcp, 0.0.0.0:7687->7687/tcp mystifying_galileo 

私Dockerfileは以下の通りです:

FROM ubuntu:latest 
MAINTAINER Shantagouda Bk "[email protected]" 
RUN apt-get update -y 
RUN apt-get install -y python-pip python-dev build-essential 
COPY . /app 
WORKDIR /app 
RUN pip install -r requirements.txt 
ENTRYPOINT ["python"] 
CMD ["app.py"] 

これは、ログからのエラーです:

Traceback (most recent call last): 
    File "app.py", line 8, in <module> 
    driver = GraphDatabase.driver("bolt://localhost:7687", auth=basic_auth("neo4j", "password")) 
    File "/usr/local/lib/python2.7/dist-packages/neo4j/v1/api.py", line 124, in driver 
    return driver_class(uri, **config) 
    File "/usr/local/lib/python2.7/dist-packages/neo4j/v1/direct.py", line 65, in __init__ 
    pool.release(pool.acquire()) 
    File "/usr/local/lib/python2.7/dist-packages/neo4j/v1/direct.py", line 39, in acquire 
    connection = self.acquire_direct(address) # should always be a resolved address 
    File "/usr/local/lib/python2.7/dist-packages/neo4j/bolt/connection.py", line 398, in acquire_direct 
    connection = self.connector(address) 
    File "/usr/local/lib/python2.7/dist-packages/neo4j/v1/direct.py", line 64, in <lambda> 
    pool = DirectConnectionPool(lambda a: connect(a, security_plan.ssl_context, **config), self.address) 
    File "/usr/local/lib/python2.7/dist-packages/neo4j/bolt/connection.py", line 468, in connect 
    s.connect(address) 
    File "/usr/lib/python2.7/socket.py", line 228, in meth 
    return getattr(self._sock,name)(*args) 
socket.error: [Errno 99] Cannot assign requested address 

私が行方不明とどのようにフラスコアプリケーションイメージを実行することになっているものを教えてください。

+0

それは、典型的には、何かが間違っていたことを意味する、あなたのコンテナがゼロ以外の終了コードで終了を示しています。あなたのログには何が表示されますか? – larsks

+0

@larsksエラーログを使用して質問を編集しました。 – Sbk3824

答えて

1

あなたのアプリはlocalhost:7687にDBを接続しようとします。

あなたのアプリケーションがあなたのホストマシン上でネイティブで実行されている場合は、localhost =あなたのローカルマシンで動作するのはそのためです。

しかし、あなたのアプリケーションがDockerコンテナ内で実行されるときは、localhost = appコンテナであるため、自分のコンテナ環境内でDBを見つけることができません。

同じネットワーク内にDBとアプリケーションを配置し、localhostの代わりにDBのコンテナ名を使用する必要があります。私は、この作業にdocker-composeを使用することをお勧めします。

+0

これはうまくいきました、ありがとうございます。 – Sbk3824

0

@Munchkinによると、データベースがコンテナ内のlocalhostで実行されていると誤っているとします。 docker-composeを必要としないソリューションの詳細はもう少しです。 --network-aliasまたは--nameを使用できます。

のNeo4jの使用実行している場合:

docker run --network-alias neodb neo4j 

または:

docker run --name neodb neo4j 

をあなたはbolt://neodb:7687のフラスココンテナから上のデータベースにアクセスすることができるはずです。

これは、両方のコンテナを同じネットワーク上で実行していることを前提としています。明示的に指定されていない場合は、両方ともbridgedネットワーク上で実行されている必要があります。

旧バージョンのDockerでは、代わりに--linkを使用する必要があります。よりご覧ください

https://docs.docker.com/engine/userguide/networking/configure-dns/

関連する問題