我正在尝试在MySQL容器启动时创建多个数据库.根据https://github.com/docker-library/mysql/pull/18,我可以/docker-entrypoint-initdb.d在图像中安装或复制我的脚本,它们将在启动时自动执行.
但是我的脚本根本没有执行.好像docker-entrypoint.sh没有在/docker-entrypoint-initdb.d目录中看到文件.
这是我的Dockerfile:
FROM mysql
ADD script.sql /docker-entrypoint-initdb.d/script.sql
RUN chmod -R 775 /docker-entrypoint-initdb.d
ENV MYSQL_ROOT_PASSWORD mypass
Run Code Online (Sandbox Code Playgroud)
这是我的script.sql:
CREATE DATABASE mydb;
CREATE DATABASE mydb2;
Run Code Online (Sandbox Code Playgroud)
我构建并运行容器:
$ docker build -t mysql .
$ docker run -v data_volume:/var/lib/mysql --name somedb -d mysql
Run Code Online (Sandbox Code Playgroud)
当我在tty中访问容器时,我可以看到它script.sql在/docker-entrypoint-initdb.d但是没有被执行.
我看过docker logs -f somedb输出但是没有错误.
我试过用.sh文件,我也试过用Maria-db,结果是一样的.
可能是什么问题呢?
Ric*_*cky 10
在运行容器之前,请将data_volume设为空.并且你的sql文件肯定会被执行.
问题在这里:
在docker-entrypoint.sh中,使用/ var/lib/mysql中存在的mysql目录检查第一次运行
if [ ! -d "$DATADIR/mysql" ]; then
//Some other logic here
for f in /docker-entrypoint-initdb.d/*; do
case "$f" in
*.sh) echo "$0: running $f"; . "$f" ;;
*.sql) echo "$0: running $f"; "${mysql[@]}" < "$f"; echo ;;
*.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${mysql[@]}"; echo ;;
*) echo "$0: ignoring $f" ;;
esac
echo
done
Run Code Online (Sandbox Code Playgroud)
您可以在Dockerfile源上获取更多详细信息
小智 8
我对 mariadb 映像(版本:10.4)遇到了完全相同的问题,当我从头开始创建容器时,我通过确保容器数据卷中的任何文件或目录都为空来解决它。
这是我的 docker 撰写文件:
玛丽亚数据库:
图片:mariadb:10.4
重新启动:除非停止
环境:
MYSQL_ROOT_PASSWORD:********
卷:
- ./storage/db:/var/lib/mysql:rw
- ./app/db/SQL:/docker-entrypoint-initdb.d/:rw
端口:
- 3306:3306/tcp
对我来说,我只需确保此路径:“./storage/db”在文件中为空。请注意,该目录必须存在但为空。
所以我几个小时都遇到了同样的问题,然后决定研究docker-entrypoint.sh。事实证明,该脚本检查$ DATADIR / mysql(典型的/ var / lib / mysql),如果datadir存在(包括),则跳过其余代码。docker-entrypoint-initdb.d
所以我要做的是制作一个简单的init.sh文件以删除datadir,然后启动docker。
docker-compose.yml:
volumes:
- ./docker/mysql/scripts:/docker-entrypoint-initdb.d
- ./mysql_data:/var/lib/mysql
Run Code Online (Sandbox Code Playgroud)
init.sh:
#!/bin/bash
rm -rf mysql_data
docker-compose up --force-recreate
Run Code Online (Sandbox Code Playgroud)
当然-d,docker-compose一旦我看到它能按预期运行,就添加它。
| 归档时间: |
|
| 查看次数: |
20388 次 |
| 最近记录: |