我正在尝试将init.sh
脚本添加到docker-entrypoint-initdb.d
,以便可以在Docker容器中完成我的数据库的配置。脚本位于scripts
所在的本地目录中的Dockerfile
目录中。 Dockerfile
很简单:
FROM glats/alpine-lamp
ENV MYSQL_ROOT_PASSWORD=password
build命令可以正常运行并且没有错误,然后,当我尝试运行容器时,它也可以运行良好,并且带有初始化脚本的链接卷:
docker run -d --name mydocker -p 8080:80 -it mydocker \
-v ~/Docker/scripts:/docker-entrypoint-initdb.d
但是,当我登录到正在运行的容器时,我看不到任何docker-entrypoint-initdb.d
目录,并且显然init.sh
从未运行:
/ # ls /
bin etc media proc sbin tmp
dev home mnt root srv usr
entry.sh lib opt run sys var
有人知道为什么不装载该卷吗?
[您正在使用的Docker映像中没有定义这样的逻辑,以上映像的entrypoint只是启动MySQL和httpd,并且没有从入口点构造数据库的能力。
如果您希望能够使用mysql-entrypoint运行初始化脚本并构建数据库,则需要使用正式映像。
[首次启动容器时,指定的名称将创建并使用提供的名称进行初始化配置变量。此外,它将执行带有在中找到的扩展名
.sh, .sql and .sql.gz
/docker-entrypoint-initdb.d
。
也正在运行容器,每个容器最好使用一个进程。您可以查看此docker-compose文件,该文件根据容器“每个容器一个进程”的规则运行堆栈