2017-10-25 5 views
1

도커 안개 여기 있습니다.도커 다중 MYSQL 컨테이너

내가 얻으려고 노력하는 것은 nginx, PHP 및 PhpMyAdmin 컨테이너 외에도 docker 작성으로 여러 MySQL 컨테이너를 실행하는 것입니다.

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의 용기 중 어느 것도 만들어지지 않습니다 :

내 고정 표시기 - compose.yml입니다. 나는 고정 표시기의 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

를? – frennky

+0

모든 것을 시작하려면'docker-compose up'을 실행하고 있습니까? 'links'의 각 인스턴스를'depends_on'으로 바꿀 수 있습니까? 그래서 데이터베이스 컨테이너를 먼저 시작 하시겠습니까? https://docs.docker.com/compose/complete-file/#depends_on –

+0

@frennky docker ps -a는 db 컨테이너를 Exited (1) 상태로 표시합니다. 15 시간 –

답변

4

동일한 데이터 디렉토리를 공유하는 여러 개의 MySQL 프로세스를 가질 수 없습니다. 작성 파일에서 모든 데이터베이스 컨테이너는 동일한 mysql_bkp 볼륨을 사용합니다. 컨테이너 당 하나의 볼륨을 생성하거나 데이터 저장을 위해 서브 디렉토리/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: 

등을 보여 -a``고정 표시기의 PS를 무엇

+0

빙고! 그랬어. 볼륨없이 시도했지만 작동하지 않았지만 별도의 볼륨을 마운트했습니다. 이제 phpMyAdmin이 연결할 수없는 이유를 알아 내야 만합니다 (단일 DB에서 사용). –