小编Mic*_*ael的帖子

如何在docker运行之后但在入口点之前只执行一次init脚本?

这几天我在学习 docker,从自己构建 mysql 镜像开始。

Dockerfile:

FROM centos
MAINTAINER Michael
ENV REFRESHED_AT 2016-07-29
RUN yum install -y mysql mariadb-server
VOLUME /var/lib/mysql
ENTRYPOINT ["/usr/libexec/mysqld", "--user=root"]
EXPOSE 3306
Run Code Online (Sandbox Code Playgroud)

docker 运行命令

docker run -d --name mysql -v /root/docker/mysql/data:/var/lib/mysql -p 3306:3306 michael/mysql
Run Code Online (Sandbox Code Playgroud)

这给出了一个错误,因为我必须先执行mysql_install_db以初始化数据库。但是我无法添加RUN mysql_install_dbDockerfile,因为我想Volume用作外部数据存储。

那么我该怎么做呢?

我知道有一个名为mysql. 我只是想这样做作为练习。


更新:感谢@Pieter。我最终通过使用他的解决方案做到了这一点,该解决方案提供了另一个entrypoint.sh组合 init 和 start 脚本,然后将其作为 Dockerfile 中的 ENTRYPOINT :

FROM centos
MAINTAINER Michael
ENV REFRESHED_AT 2016-07-29
RUN yum install -y mysql mariadb-server
VOLUME /var/lib/mysql
COPY entrypoint.sh /usr/local/bin/
ENTRYPOINT …
Run Code Online (Sandbox Code Playgroud)

docker

5
推荐指数
1
解决办法
8845
查看次数

标签 统计

docker ×1