2017-09-06 10 views
0

dockerを使用してdbとWebサーバーをインストールしようとしています。symfonyは初めてアセットをインストールすることはできません

私のドッキングウィンドウ-コンファイルは次のとおりです。

version: '3.3' 
services: 
    db: 
    image: pix_db 
    container_name: pix_db 
    image: mysql:5.7 
    volumes: 
     - db_data:/var/lib/mysql 
    restart: always 
    environment: 
     MYSQL_ROOT_PASSWORD: test 
     MYSQL_DATABASE: test 
     MYSQL_USER: test 
     MYSQL_PASSWORD: test 
    networks: 
    - backend 
    api: 
    image: pix_api 
    container_name: pix_api 
    build: 
     context: . 
     dockerfile: ./Dockerfiles/api/Dockerfile.cpu 
    depends_on: 
    - media 
    - db 
    ports: 
    - "8080:8080" 
    networks: 
    - backend 

networks: 
    backend: 
    hidden: 

volumes: 
    db_data: 

私は私のドッキングウィンドウのファイルにこのラインに到達すると:

[Doctrine\DBAL\Exception\ConnectionException] 
    An exception occured in driver: SQLSTATE[HY000] [2002] php_network_getaddresses: getaddrinfo failed: Name or service not known 

php bin/console assets:install -e prod 

それは次のようにいくつかのエラーでクラッシュ前に行からコンテナを構築します。 コマンドphp bin/console assets:install -e prod cr最初の私はそれを呼び出すときに同じエラーで灰。 しかしと、それは成功二回:あなたの問題はあなたがイメージ建物自体の間にDBにアクセスしようとしているということです

Installing assets as hard copies. 

--- ----------------------------- ---------------- 
     Bundle      Method/Error 
--- ----------------------------- ---------------- 
    ✔ NelmioApiDocBundle   copy 
     -> web/bundles/nelmioapidoc 
    ✔ AppBundle      copy 
     -> web/bundles/app 
--- ----------------------------- ---------------- 

! [NOTE] Some assets were installed via copy. If you make changes to these assets you have to run this command again. 


[OK] All assets were successfully installed. 
+0

ビルド中にDBを使用しようとしていますか? –

答えて

2

。それぞれのイメージは個別にビルドされ、イメージが存在するときにはmysql DBなどの実行中のサービスにアクセスできません。

したがって、php bin/console assets:install -e prodのようなものを使用してDBに接続すると、動作しません。 DBが呼び出されないようにコマンドを実行するか、コンテナの開始までコマンドを遅らせる必要があります。

たとえば、mysqlイメージを見ると、ビルド中にDBを初期化しません。コンテナの開始時にもブランクDBを構築するのにdocker-entrypoint.shを使用します。ですから、同様のアプローチに従うと、コンテナが起動した後に実行されますentrypoint.shスクリプトを作成する必要が

https://github.com/docker-library/mysql/blob/0590e4efd2b31ec794383f084d419dea9bc752c4/5.7/docker-entrypoint.sh

以下のリンクを参照してください、それはあなたのためにこれらの資産およびその他のものを構築します。また、コマンドを実行する前に、mysqlコンテナが完全に立ち上がり、DB接続を受け入れる準備ができていることを確認する必要があります。

私は通常、初期化の前に15睡眠を追加します。でも、https://github.com/vishnubob/wait-for-itのようなものを使うこともできます。

関連する問題