如何通过dockerfile安装mysql服务器

如何通过dockerfile安装mysql服务器,mysql,docker,dockerfile,Mysql,Docker,Dockerfile,有人知道如何通过dockerfile安装mysql服务器吗?我已经编写了一个Dockerfile,但是构建以一个错误结束:/bin/sh:1:/usr/bin/mysqld:notfound 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/

有人知道如何通过dockerfile安装mysql服务器吗?我已经编写了一个Dockerfile,但是构建以一个错误结束:/bin/sh:1:/usr/bin/mysqld:notfound

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

对于ubuntu:16.04基本映像,
mysqld
位于
/usr/sbin
,而不是
/usr/bin

如果可以在最终运行命令之前添加一个步骤
运行哪个mysqld
,该命令将显示mysqld可执行文件的位置。它可能因您使用的基本映像/发行版而异

如果文件位于
$path

您可能还需要更新
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

您使用的是什么基本映像?来自ubuntu:16.04为什么不使用官方映像或使用他们的Dockerfile作为基本映像?我已将我的Jenkins配置为在docker容器中运行构建作业和功能测试。例如,当我单击“Build Now”(立即构建)按钮时,Jenkins将构建Git中的Dockerfile并运行容器,以便在该容器中完成构建步骤(Jenkins文件)。我也需要在这里安装mysql服务器。没错,mysqld可以在usr/sbin中找到。但现在我得到了一个非零代码:1。你能看到我的“脚本”中有什么错误吗?@adbo是的,我相信你还需要编辑你的
RUN sed
行。将更新我的答案以注意sed错误。这行代码成功,没有失败-我正在获取非零代码:RUN/usr/bin/mysqld&&sleep 5&&\mysql-uroot-e“创建用户'${DB\u USER}'@',由'${DB\u PASSWORD}'标识'&\mysql-uroot-e“使用授予选项授予'${DB\u USER}'@'上的所有权限”&&&\mysql-uroot-e“创建数据库${DB_NAME}”&&&\mysqladmin-urootshutdown@adbo这会导致mysql错误,而不是docker错误,但希望有人能带着一些mysql经验加入进来。有了一个新的/干净的容器,我可以运行
mysqld——初始化
,登录,更改root用户密码,让一切正常工作。要编写脚本,您可以在此处查看:)。另外,您可以查看mysql docker映像本身,而不是自己启动。通过ARG/ENV变量设置user/pass有一个约定,这可能更容易设置