首页 > 解决方案 > Docker `docker-entrypoint-initdb` 未链接

问题描述

我正在尝试向其中添加一个init.sh脚本,docker-entrypoint-initdb.d以便我可以完成在 docker 容器中配置我的数据库。该脚本scripts位于我所在的本地目录中的一个目录中DockerfileDockerfile很简单:

FROM glats/alpine-lamp
ENV MYSQL_ROOT_PASSWORD=password

构建命令可以正常工作并且没有错误地完成,然后当我尝试运行容器时,它也可以正常运行,并带有带有 init 脚本的链接卷:

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

有谁知道为什么卷没有安装?

标签: dockerinitalpinedocker-volume

解决方案


您正在使用的 Docker 镜像中没有定义这样的逻辑,上述镜像的入口点只是启动 MySQL 和 httpd,并且没有任何从入口点构造数据库的能力。

如果您希望能够使用mysql-entrypoint运行 init 脚本并构建您需要使用官方镜像的数据库。

初始化一个新实例

首次启动容器时,将使用提供的配置变量创建并初始化具有指定名称的新数据库。此外,它将执行扩展名为.sh, .sql and .sql.gz. /docker-entrypoint-initdb.d

同时运行容器,最好每个容器使用一个进程。您可以根据容器“每个容器一个进程”的规则查看运行堆栈的docker-compose文件


推荐阅读