如何在使用yml文件创建容器后运行命令

时间:2017-05-13 02:36:58

标签: docker docker-compose

我对Docker的经验非常有限,并且遇到问题,所以我有以下yml文件:

version: '2'
services:
    python:
        restart: always
        build: .path/to/docker/file
        ports:
            - "5000:5000"
            - "8888:8888"
        links:
            - db
        depends_on:
            - db
        volumes:
            - ./path/to/file/:/app:z
        entrypoint:
            - python
            - -u
            - /app/run.py

    db:
        image: mysql:latest
        environment:
            MYSQL_ROOT_PASSWORD: xxyyzz
            MYSQL_DATABASE: database_name
            MYSQL_USER: user_name
            MYSQL_PASSWORD: xxyyzz
        volumes:
            - ./Dump.sql:/db/Dump.sql:z
            - ./Dump_Test.sql:/db/Dump_Test.sql:z
            - ./big_fc.sql:/db/big_fc.sql:z
        ports:
            - "3306:3306"

我需要为第二个容器db运行以下命令:

echo '[mysqld]' >> /etc/mysql/conf.d/mysql.cnf 
echo 'sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' >> /etc/mysql/conf.d/mysql.cnf 

关键是我想要为第一个容器python提供docker文件时只运行一次这些命令。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

我的第一个建议是使用您自己的Dockerfile建立自己的图像。在这种情况下,您将执行一次,并且所有容器将具有相同的配置。

Dockerfile应如下所示:

FROM mysql:latest

COPY create_config.sh /tmp/create_config.sh
CMD ["/tmp/create_config.sh"]

在与create_config.sh相同的目录中创建Dockerfile,并将所需命令放在那里:

#!/bin/bash

echo '[mysqld]' >> /etc/mysql/conf.d/mysql.cnf 
echo 'sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' >> /etc/mysql/conf.d/mysql.cnf

现在您可以在docker-compose.yml

中使用它了
db:
    context: .
    dockerfile: Dockerfile

请记住,context是新Dockerfile所在目录的路径。