2017-11-13 20 views
0

ドッキング用容器を初めて使用しています。 Circle CIのFlaskアプリケーションを自動的に単体テストしようとしています。しかし、postgresコンテナに接続することはできません。私のローカルコンピュータ(macOS Sierra)で動作します。この問題を解決するためにさらに情報が必要な場合はお知らせください。ありがとうございました!!ポストグルに基づいてコンテナに接続できません

ドッキングウィンドウ-compose.yml

version: '3' 
services: 
    web: 
    container_name: web 
    build: ./web 
    ports: 
     - "5000:5000" 
    depends_on: 
     - postgres 
    volumes: 
     - ./web/.:/app 
    tty: true 

    postgres: 
    container_name: postgres 
    build: ./db 
    ports: 
     - "5432:5432" 

config.yml

version: 2 
jobs: 
    build: 
    machine: true 

    working_directory: ~/repo 

    steps: 
     - checkout 

     - run: 
      name: Install Docker Compose 
      command: | 
      sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose 
      sudo chmod +x /usr/local/bin/docker-compose 

     - run: 
      name: Start container and veryfy it's working 
      command: | 
      set -x 
      cd ~/repo/docker 
      docker-compose up --build -d 
     - run: 
      name: Run test 
      command: | 
      cd ~/repo/docker 
      docker-compose run web python tests/test_therapies.py 

サークルCIビルドログ

connection = pool._invoke_creator(self) 
    File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/strategies.py", line 105, in connect 
    return dialect.connect(*cargs, **cparams) 
    File "/usr/local/lib/python3.6/site-packages/sqlalchemy/engine/default.py", line 393, in connect 
    return self.dbapi.connect(*cargs, **cparams) 
    File "/usr/local/lib/python3.6/site-packages/psycopg2/__init__.py", line 130, in connect 
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync) 
sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) could not connect to server: Connection refused 
    Is the server running on host "postgres" (172.18.0.2) and accepting 
    TCP/IP connections on port 5432? 


---------------------------------------------------------------------- 
Ran 1 test in 0.025s 

FAILED (errors=1) 
    Exited with code 1 
+0

'docker-compose up --build -d'の後に' sleep 20'を追加しました。できます!! しかし、解決策は本質的ではありません... – tekun

答えて

0

私はこの問題は、Postgresのサービスが完全に起動していないということだと思いますあなたのWebアプリケーションが起動するとき。スリープタイマーを追加した後のあなたのコメントに基づいて、これは問題だと思われます。

dadarek/wait-for-dependenciesという名前のコンテナを、サービスが起動するのを待つメカニズム(あなたの場合はpostgres)として実行できます。

1):

これを実装する方法は次のとおりです。

version: '3' 
services: 
    waitfordb: 
    image: dadarek/wait-for-dependencies 
    depends_on: 
     - postgres 
    command: postgres:5432 

    web: 
    container_name: web 
    build: ./web 
    ports: 
     - "5000:5000" 
    depends_on: 
     - waitfordb 
     - postgres 
    volumes: 
     - ./web/.:/app 
    tty: true 

    postgres: 
    container_name: postgres 
    build: ./db 
    ports: 
     - "5432:5432" 

2):あなたのドッキングウィンドウ-compose.ymlは次のようになり、今になりますあなたのドッキングウィンドウ-compose.yml

waitfordb: 
    image: dadarek/wait-for-dependencies 
    depends_on: 
     - postgres 
    command: postgres:5432 

に新しいサービスを追加します。スタートアップ

docker-compose run --rm waitfordb 
docker-compose up -d web postgres 

を構成する結果があなたのwebサービスが今起動しようとする前に、あなたのPostgresの容器にアップするポート5432を待つべきであるということです。

関連する問題