【问题标题】:How to Install mysql-server via dockerfile如何通过 dockerfile 安装 mysql-server
【发布时间】:2017-11-16 14:52:04
【问题描述】:

有人知道如何通过 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

【问题讨论】:

  • 你使用的是什么基础镜像?
  • FROM ubuntu:16.04
  • 为什么不使用官方镜像或者使用他们的 Dockerfile 作为基础呢?
  • 我已将我的 Jenkins 配置为在 docker 容器中运行我们的构建作业和功能测试。例如,当我单击“立即构建”按钮时,Jenkins 将构建 Git 中的 Dockerfile 并运行容器,以便可以在此容器中完成构建步骤(Jenkinsfile)。并且知道我也需要安装一个 mysql-server。

标签: mysql docker dockerfile


【解决方案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

【讨论】:

  • 你是对的 mysqld 是在 usr/sbin 中找到的。但现在我得到一个非零代码: 1. 你能在我的“脚本”中看到什么错误吗?
  • @adbo 是的,我相信您还需要编辑您的 RUN sed 行。将更新我的答案以注意 sed 错误
  • 这一行成功,没有失败 - 我得到非零代码: 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 "创建数据库${DB_NAME}" && \ mysqladmin -uroot 关机
  • @adbo 这是 mysql 错误,而不是 docker 错误,但希望有人可以加入一些 mysql 经验。使用新鲜/干净的容器,我可以运行 mysqld --initialize、登录、更改 root 用户密码并让一切正常工作。要编写脚本,您可以查看此处:stackoverflow.com/q/2995054/2892779)。此外,您可能会查看 mysql docker 映像本身,而不是自己启动它。通过 ARG/ENV 变量设置用户/通行证的约定可能更容易设置
猜你喜欢
  • 2015-02-18
  • 1970-01-01
  • 2015-06-07
  • 2017-03-23
  • 1970-01-01
  • 1970-01-01
  • 2018-03-11
  • 2019-09-12
  • 1970-01-01
相关资源
最近更新 更多