簡體   English   中英

Docker-如何更改Docker Compose文件以自動化MySQL容器的bash腳本?

[英]Docker - how to alter my Docker Compose file to automate a bash script for the MySQL container?

我具有以下設置Docker Composer設置,並希望運行shell腳本來自動執行諸如將DB導入MySQL數據庫之類的任務。

# Adopt version 2 syntax:
version: '2'

volumes:
    database_data:
        driver: local

services:
###########################
# Setup the Nginx container
###########################
nginx:
    image: nginx:latest
    ports:
        - 8080:80
    volumes:
        - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    volumes_from:
        - php

###########################
# Setup the PHP container
###########################
php:
    build: ./docker/php/
    expose:
        - 9000
    volumes:
        - .:/var/www

###########################
# Setup the Database (MySQL) container
###########################
mysql:
    image: mysql:latest
    expose:
        - 3306
    volumes:
        - database_data:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: project
        MYSQL_USER: project
        MYSQL_PASSWORD: project

最好的解決方案是創建一個自定義的Dockerfile,該文件擴展了mysql並添加了一個自定義的shell腳本,該腳本可以滿足您的需求。 例如:

start.sh

#!/bin/sh

mysqld
mysql -u project -ppropject project < /path/to/backup.sql

不要忘記將backup.sql添加到Dockerfile或docker-compose.yml

現在,Dockerfile:

FROM mysql:latest

COPY start.sh /tmp/start.sh
COPY backup.sql /path/to/backup.sql

CMD ["/tmp/start.sh"]

如果您經常更改backup.sql ,則將其添加到Dockerfile中是沒有意義的。 而是將其放在docker-compose.yml volumes下:

mysql:
    build: .
    expose:
        - 3306
    volumes:
        - ./backup.sql:/path/to/backup.sql
        - database_data:/var/lib/mysql
    environment:
        MYSQL_ROOT_PASSWORD: secret
        MYSQL_DATABASE: project
        MYSQL_USER: project
        MYSQL_PASSWORD: project

可以繼續使用原始映像:將設置腳本作為配置文件加載到容器中(使用長格式定義,以便您可以設置執行權限),然后覆蓋Entrypoint來運行腳本(應該運行腳本)原始入口點腳本完成后)。 所以像這樣:

mysql:
image: mysql:latest
expose:
    - 3306
volumes:
    - database_data:/var/lib/mysql
environment:
    MYSQL_ROOT_PASSWORD: secret
    MYSQL_DATABASE: project
    MYSQL_USER: project
    MYSQL_PASSWORD: project
configs:
    - source: ./OverrideScript.sh
    target: /OverrideScript.sh
    #0777 will work too, but you can't write to it either way
    mode: 0555
entrypoint: /OverrideScript.sh

其他答案是正確的,即“正確”的方法是制作自己的圖像。 但是TBH,如果您的替代腳本相對較小且重量輕,則解決方法並不那么糟糕,並且使您不必在每次MySQL發布新映像時都重新構建自定義映像。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM