Docker multiple MYSQL containers

只愿长相守 提交于 2019-12-07 06:09:32

问题


Docker newbie here.

What I'm trying to achieve is to run multiple MySQL containers with docker compose, in addition to an nginx, a PHP and a PhpMyAdmin container.

This is my docker-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:

But none of the MySQL containers are created. When I run docker ps I get:

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:

docker logs shows:

Unable to lock ./ibdata1 error: 11

or

InnoDB: Unsupported redo log format.

I don't know what I'm doing wrong, or how I should start debugging. Any help would be mostly appreciated.


回答1:


You can't have multiple mysql processes sharing the same data directory. In your compose file, every database container is using the same mysql_bkp volume. You will need to either create one volume per container, or configure mysql to use a unique subdirectory of /var/lib/mysql for storing data.

If you simply remove the volumes: key from each database service, they will all get a unique anonymous volume (because that's how the mysql image is configured).

Alternatively, you can declare and mount a separate volume for each service:

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:

Etc.



来源:https://stackoverflow.com/questions/46938303/docker-multiple-mysql-containers

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!