我希望使用初始化数据库构建一个docker镜像。 此初始数据将包含默认客户参考值' XXX'。
这是我的Dockerfile:
body {
background: url("/images/laptop_bg.jpg");
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;
background-size: cover;
background-repeat: no-repeat;
font-family: 'Proxima Nova', Georgia, sans-serif;
}
html{
height: 100%;
}
启动此图像的容器时,我需要将ref值替换为用户的特定值' ABCD',它将来自docker compose设置的环境变量文件。
因此要运行的更新查询类似于:
FROM mysql/mysql-server:5.7
COPY data.sql /docker-entrypoint-initdb.d/
如何让Dockerfile执行此操作?我不认为它可以是一个RUN命令,因为我不希望更新成为图像构建的一部分,而是图像启动的一部分(如果运行它,它会很好)每次启动都会更新。
我已经设置了所有常用的mysql env varibles(MYSQL_ROOT_PASSWORD / MYSQL_ROOT_HOST / MYSQL_DATABASE / MYSQL_USER / MYSQL_PASSWORD),并希望引用另一个env var来设置所需的ref。热衷于看到这可以作为原始命令和脚本来完成。
答案 0 :(得分:0)
Dockerfile
或build:
部分。
由于您希望仅在docker run
或docker-compose up
阶段进行更新,因此可以使用CMD或ENTRYPOINT执行更新。
有几种方法,但我建议采用以下方法:
<强>搬运工-compose.yml 强>
version: '3'
services:
your-service:
env_file: ./your-mysql-env-file.env
image: mysql/mysql-server:5.7
volumes:
- ./data.sql:/docker-entrypoint-initdb.d/data.sql
- ./your-init-sql-commands.sql:/docker-entrypoint-initdb.d/your-init-sql-commands.sql
container_name: your-container-name
command:
- /bin/bash
- -c
- |
/etc/init.d/mysqld start
mysql -u ${MYSQL_USER} -p ${MYSQL_PASSWORD} -h ${MYSQL_ROOT_HOST} ${MYSQL_DATABASE} < your-init-sql-commands.sql
[other commands if needed...]
请注意,您的update client set ref='ABCD' where ref='XXX'
应在your-init-sql-commands.sql
内定义。因此,如果您想更改更新,则无需重建图像。
你的mysql-env-file.env只是在里面定义了你的MYSQL env变量。
image:
部分,并在docker-compose.yml中将volumes:
更改为COPY,但所有这些步骤也可以使用Dockerfile和docker run
完成。 我希望这对你有所帮助。