【问题标题】:Docker `docker-entrypoint-initdb` not getting linkedDocker `docker-entrypoint-initdb` 未链接
【发布时间】:2020-07-04 13:52:56
【问题描述】:

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

FROM glats/alpine-lamp
ENV MYSQL_ROOT_PASSWORD=password

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

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

有人知道为什么没有安装卷吗?

【问题讨论】:

  • -v这样的Docker选项需要在镜像名称mydocker之前;图像名称之后的任何内容都被视为要运行的命令。 (看起来该图像也忽略了它给出的命令。)

标签: docker init alpine docker-volume


【解决方案1】:

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

如果你想有能力使用mysql-entrypoint运行初始化脚本并构建你需要使用官方镜像的数据库。

Initializing a fresh instance

当一个容器第一次启动时,一个新的数据库 将使用提供的创建和初始化指定的名称 配置变量。此外,它将执行文件 扩展名.sh, .sql and .sql.gz 位于 /docker-entrypoint-initdb.d.

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

【讨论】:

    猜你喜欢
    • 2016-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-23
    • 2020-01-03
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    相关资源
    最近更新 更多