如何通过Dockerfile安装mysql-server

3
有人知道如何通过Dockerfile安装mysql-server吗?我已经编写了一个Dockerfile,但构建过程出现错误:/bin/sh: 1: /usr/bin/mysqld: not found
USER root

RUN apt-get update
RUN DEBIAN_FRONTEND=noninteractive apt-get install -y mysql-server-5.7

# Remove pre-installed database
RUN rm -rf /var/lib/mysql/*

RUN sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/"/etc/mysql/my.cnf

ENV DB_USER example
ENV DB_PASSWORD example
ENV DB_NAME example
ENV VOLUME_HOME "/var/lib/mysql"

EXPOSE 3306 

RUN cp /etc/mysql/my.cnf /usr/share/mysql/my-default.cnf
RUN /usr/bin/mysqld  && sleep 5 && \
     mysql -uroot -e "CREATE USER '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASSWORD}'" && \
     mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO '${DB_USER}'@'%' WITH GRANT OPTION" &&\
     mysql -uroot -e "CREATE DATABASE ${DB_NAME}" && \
     mysqladmin -uroot shutdown

你使用的基础镜像是什么? - Jay Dorsey
1
从ubuntu:16.04开始 - adbo
为什么不使用官方镜像或以其Dockerfile作为基础呢? - Shawn C.
我已经配置了我的Jenkins,以在docker容器中运行我们的构建作业和功能测试。例如,当我点击“立即构建”按钮时,Jenkins将构建Git中的Dockerfile并运行容器,以便可以在此容器中完成构建步骤(Jenkinsfile)。现在我还需要在其中安装一个mysql服务器。 - adbo
1个回答

1
对于基于ubuntu:16.04的镜像,mysqld位于/usr/sbin而不是/usr/bin
如果您可以在最终的RUN命令之前添加一步RUN which mysqld,它将显示mysqld可执行文件的位置。这可能因您使用的基础镜像/发行版而异。
如果文件在您的$PATH中,则还可以使用RUN mysqld ...而无需完整路径。
您还可能需要更新RUN sed行,如下所示,在引号周围添加空格:
RUN sed -i -e "s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/" /etc/mysql/my.cnf

否则,您可能会看到以下错误:

The command '/bin/sh -c sed -i -e"s/^bind-address\s*=\s*127.0.0.1/bind-address = 0.0.0.0/"/etc/mysql/my.cnf' returned a non-zero code: 1

1
你是对的,mysqld可以在usr/sbin中找到。但现在我得到了一个非零代码:1。你能看出我的“脚本”有什么问题吗? - adbo
@adbo 是的,我相信你还需要编辑你的 RUN sed 行。我会更新我的答案来指出 sed 的错误。 - Jay Dorsey
1
这行代码毫无失败 - 我正在获得非零代码:RUN /usr/bin/mysqld && sleep 5 &&
mysql -uroot -e "CREATE USER '${DB_USER}'@'%' IDENTIFIED BY '${DB_PASSWORD}'" &&
mysql -uroot -e "GRANT ALL PRIVILEGES ON . TO '${DB_USER}'@'%' WITH GRANT OPTION" &&
mysql -uroot -e "CREATE DATABASE ${DB_NAME}" &&
mysqladmin -uroot shutdown
- adbo
@adbo 这已经偏向于 MySQL 错误而不是 Docker 错误,但希望有人能提供一些 MySQL 经验。使用一个新的/干净的容器,我可以运行 mysqld --initialize,登录,更改 root 用户密码并使一切正常工作。要编写脚本,您可以在此处查看:https://dev59.com/23A75IYBdhLWcg3w_ef1)。此外,您可以查看 mysql docker 镜像本身,而不是自己启动它。有一个约定可以通过 ARG/ENV 变量设置用户/密码,这可能更容易设置。 - Jay Dorsey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接