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

我对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文件一样。 我怎样才能做到这一点?

我的第一个build议是用你自己的Dockerfilebuild立自己的图像。 在这种情况下,你会做一次,所有的容器将具有相同的configuration。

Dockerfile应该如下所示:

 FROM mysql:latest COPY create_config.sh /tmp/create_config.sh CMD ["/tmp/create_config.sh"] 

在与Dockerfile相同的目录中创buildcreate_config.sh ,并在其中放置所需的命令:

 #!/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所在的目录的path。