我希望用初始化的数据库构建一个docker镜像 . 此初始数据将包含默认客户端参考值“XXX” .
这是我的Dockerfile:
FROM mysql/mysql-server:5.7
COPY data.sql /docker-entrypoint-initdb.d/
启动此映像的容器时,我需要将ref值替换为用户的特定值“ABCD”,它将来自docker compose文件设置的环境变量 .
因此,要运行的更新查询类似于:
update client set ref='ABCD' where ref='XXX'
如何让Dockerfile执行此操作?我不认为它可以是一个RUN命令,因为我不希望更新成为图像构建的一部分,而是图像启动的一部分(如果它在每次启动时都运行此更新,那就没问题) .
我有所有通常的mysql env varibles设置(MYSQL_ROOT_PASSWORD / MYSQL_ROOT_HOST / MYSQL_DATABASE / MYSQL_USER / MYSQL_PASSWORD),并希望引用另一个env var来设置所需的ref . 热衷于看到这可以作为原始命令和脚本来完成 .
1 回答
你是对的,你想要持久化的一切都应该在你的docker-compose文件的
Dockerfile
或build:
部分 .由于您希望仅在
docker run
或docker-compose up
阶段进行更新,因此可以使用CMD或ENTRYPOINT执行更新 . 有几种方法,但我建议使用以下方法:docker-compose.yml
请注意,您的
update client set ref='ABCD' where ref='XXX'
应该在your-init-sql-commands.sql
中定义 . 因此,如果要更改更新,则无需重建映像 .your-mysql-env-file.env只需在里面定义你的MYSQL env变量,如果你需要它们 .
请注意,我在docker-compose.yml中已经通过
image:
部分更改了dockerfile并将其更改为volumes:
,但所有这些步骤也可以通过Dockerfile和docker run
完成 .如果您不需要多个命令,只需将所有行更改为一个 .
我希望这对你有所帮助 .