我对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文件时只运行一次这些命令。我怎样才能做到这一点?
答案 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所在目录的路径。