2017-10-25 6 views
1

ドッカーの初心者はこちら。ドッカー複数MYSQLコンテナ

私が達成しようとしているのは、nginx、PHP、およびPhpMyAdminコンテナに加えて、複数のMySQLコンテナをdocker composeで実行することです。

これは私のドッキングウィンドウ-compose.ymlです:

version: '3' 
services: 
    server: 
     build: 
      context: ./ 
      dockerfile: server.docker 
     volumes: 
      - ./:/var/www 
     ports: 
      - "8080:80" 
     links: 
      - app 
    app: 
     build: 
      context: ./ 
      dockerfile: app.docker 
     volumes: 
      - ./:/var/www 
     links: 
      - db_callcenter 
      - db_forecast 
      - db_logistics 
      - db_products 
      - db_rm 
      - db_rma 
      - db_settings 
      - db_tasks 
      - db_users 
    db_callcenter: 
     image: mysql:5.7 
     environment: 
      - "MYSQL_ROOT_PASSWORD=secret" 
      - "MYSQL_DATABASE=prj_callcenter" 
     ports: 
      - "33061:3306" 
     volumes: 
      - mysql_bkp:/var/lib/mysql 
    db_forecast: 
     image: mysql:5.7 
     environment: 
      - "MYSQL_ROOT_PASSWORD=secret" 
      - "MYSQL_DATABASE=prj_forecast" 
     ports: 
      - "33062:3306" 
     volumes: 
      - mysql_bkp:/var/lib/mysql 
    db_logistics: 
     image: mysql:5.7 
     environment: 
      - "MYSQL_ROOT_PASSWORD=secret" 
      - "MYSQL_DATABASE=prj_logistics" 
     ports: 
      - "33063:3306" 
     volumes: 
      - mysql_bkp:/var/lib/mysql 
    db_products: 
     image: mysql:5.7 
     environment: 
      - "MYSQL_ROOT_PASSWORD=secret" 
      - "MYSQL_DATABASE=prj_products" 
     ports: 
      - "33064:3306" 
     volumes: 
      - mysql_bkp:/var/lib/mysql 
    db_rm: 
     image: mysql:5.7 
     environment: 
      - "MYSQL_ROOT_PASSWORD=secret" 
      - "MYSQL_DATABASE=prj_rm" 
     ports: 
      - "33065:3306" 
     volumes: 
      - mysql_bkp:/var/lib/mysql 
    db_rma: 
     image: mysql:5.7 
     environment: 
      - "MYSQL_ROOT_PASSWORD=secret" 
      - "MYSQL_DATABASE=prj_rma" 
     ports: 
      - "33066:3306" 
     volumes: 
      - mysql_bkp:/var/lib/mysql 
    db_settings: 
     image: mysql:5.7 
     environment: 
      - "MYSQL_ROOT_PASSWORD=secret" 
      - "MYSQL_DATABASE=prj_settings" 
     ports: 
      - "33067:3306" 
     volumes: 
      - mysql_bkp:/var/lib/mysql 
    db_tasks: 
     image: mysql:5.7 
     environment: 
      - "MYSQL_ROOT_PASSWORD=secret" 
      - "MYSQL_DATABASE=prj_tasks" 
     ports: 
      - "33068:3306" 
     volumes: 
      - mysql_bkp:/var/lib/mysql 
    db_users: 
     image: mysql:5.7 
     environment: 
      - "MYSQL_ROOT_PASSWORD=secret" 
      - "MYSQL_DATABASE=prj_users" 
     ports: 
      - "33069:3306" 
     volumes: 
      - mysql_bkp:/var/lib/mysql 
    pma: 
     image: phpmyadmin/phpmyadmin 
     environment: 
      - "PMA_USER=root" 
      - "PMA_PASSWORD=secret" 
     ports: 
      - "8001:80" 
     links: 
      - db_callcenter 
      - db_forecast 
      - db_logistics 
      - db_products 
      - db_rm 
      - db_rma 
      - db_settings 
      - db_tasks 
      - db_users 
volumes: 
    mysql_bkp: 

しかし、MySQLのコンテナのいずれも作成されません。私はドッキングウィンドウpsを実行すると、私が手:

CONTAINER ID  IMAGE     COMMAND     CREATED    STATUS    PORTS     NAMES 
0228e9c8a267  phpmyadmin/phpmyadmin "/run.sh phpmyadmin"  About a minute ago Up 30 seconds  0.0.0.0:8001->80/tcp prj_pma_1 
e6c6b11905f1  prj_server    "nginx -g 'daemon ..." 22 minutes ago  Up 2 minutes  0.0.0.0:8080->80/tcp prj_server_1 
2e7dd484c6e5  prj_app    "docker-php-entryp..." 24 minutes ago  Up 2 minutes  9000/tcp    prj_app_1 

UPDATE:

ドッカログを示しています

Unable to lock ./ibdata1 error: 11 

または

InnoDB: Unsupported redo log format. 

私は私がやっているかわかりません間違っている、またはどのように私はデバッグを開始する必要があります。どんな助けでも大歓迎です。

+1

'ドッカPSはあなたが何を示して-a'のでしょうか? – frennky

+0

すべてを開始するには 'docker-compose up'を実行していますか? 'links'の各インスタンスを' depends_on'に変更してデータベースコンテナを最初に起動できますか? https://docs.docker.com/compose/compose-file/#depends_on –

+0

@frennky docker ps -aは、ステータスがExited(1)の状態のdbコンテナを表示します。 –

答えて

4

複数のmysqlプロセスで同じデータディレクトリを共有することはできません。作成ファイルでは、すべてのデータベースコンテナが同じmysql_bkpボリュームを使用しています。コンテナごとに1つのボリュームを作成するか、データ格納用に一意のサブディレクトリ/var/lib/mysqlを使用するようにmysqlを構成する必要があります。

各データベースサービスからvolumes:キーを削除するだけで、すべてが一意の匿名ボリュームを取得します(これはmysqlイメージの設定方法なので)。

また、あなたはサービスごとに別々のボリュームを宣言してマウントすることができます。

services: 
    db_logistics: 
     image: mysql:5.7 
     volumes: 
      - mysql_bkp_logistics:/var/lib/mysql 
    db_products: 
     image: mysql:5.7 
     volumes: 
      - mysql_bkp_products:/var/lib/mysql 

volumes: 
    mysql_bkp_logistics: 
    mysql_bkp_products: 

+0

ビンゴ!それがそれでした。私はボリュームなしで試しましたが、それはうまくいかず、別のボリュームをマウントしました。今では、phpMyAdminが接続できない理由を知る必要があります(単一のDBの場合のみ) –

関連する問題