Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Can';t在容器内运行mysql,容器使用dockerFile构建映像_Docker - Fatal编程技术网

Can';t在容器内运行mysql,容器使用dockerFile构建映像

Can';t在容器内运行mysql,容器使用dockerFile构建映像,docker,Docker,我试图用dockerFile构建一个mysql映像。 以下是我的代码: FROM ubuntu MAINTAINER jimmy #install mysql RUN apt-get update RUN apt-get install -y mysql-server RUN apt-get install -y mysql-client RUN apt-get install -y libmysqlclient-dev #set permission of mysql RUN servic

我试图用dockerFile构建一个mysql映像。 以下是我的代码:

FROM ubuntu
MAINTAINER jimmy

#install mysql
RUN apt-get update
RUN apt-get install -y mysql-server
RUN apt-get install -y mysql-client
RUN apt-get install -y libmysqlclient-dev

#set permission of mysql
RUN service mysql stop
RUN usermod -d /var/lib/mysql/ mysql
RUN chown -R mysql:mysql /var/lib/mysql 
当我运行docker build-t mysql测试时--无缓存它将成功构建映像

但如果我构建一个容器并在其中运行服务mysql start,它将失败

* Starting MySQL database server mysqld                     [fail] 
我必须在容器中再次键入chown-R mysql:mysql/var/lib/mysql,以便服务mysql start能够成功运行


为什么呢?我已经在dockerFile中运行了chown-R mysql:mysql/var/lib/mysql,不是吗?

尝试将
/var/lib/mysql
目录定义为
dockerFile
中的卷

FROM ubuntu
MAINTAINER jimmy

#install mysql
RUN apt-get update -y
RUN apt-get install -y mysql-server
RUN apt-get install -y mysql-client
RUN apt-get install -y libmysqlclient-dev

RUN echo yes
VOLUME /var/lib/mysql        #change

RUN mkdir -p /var/run/mysqld   #change
RUN usermod -d /var/lib/mysql/ mysql
RUN find /var/lib/mysql -type f -exec touch {} \;        #change
RUN chown -R mysql:mysql /var/lib/mysql /var/run/mysqld  #change
这个Dockerfile为我解决了这个问题。Docker建议在Docker中使用mysql服务时使用卷

似乎这仍然是一个悬而未决的问题-

参考-

详细说明-

是的,我们知道overlayfs只支持POSIX的一个子集 标准(另请参见docker/for linux#72(评论),谢谢Akihiro)

通常,有状态数据不应存储在容器的 文件系统,但在卷中。这不仅允许您升级 在不丢失数据的情况下使用容器(当 作为服务的一部分运行这些容器,因为更新 这项服务将用一个新的容器替换容器),它还有一个巨大的优势 对性能的影响,如在容器的文件系统中写入 添加中使用的写时拷贝文件系统的开销 容器

有关更多信息,请参阅文档中的“卷”部分; ,以及 Docker Hub上官方MySQL映像的“数据”部分

如果您的目标是运行MySQL容器,我绝对推荐您 查看MySQL的官方图片,其中MySQL是为 在容器中运行,并允许您初始化新的 使用/docker entrypoint initdb.d备份中的实例(请参阅 Docker上MySQL自述中的“初始化新实例”部分 轮毂)


为什么不拉一个准备好的,可以运行的,而不是手动构建它呢?因为我把这个案例作为一个docker培训。你可以尝试使用
sudo RUN chown-R mysql:mysql/var/lib/mysql
@CharlesXu MSFT你是说“RUN sudo chown-R mysql:mysql/var/lib/mysql”吗?我试过了,但还是不行。试一下,在命令
RUN chown-R mysql:mysql/var/lib/mysql
之前添加一行
User root
。您好,我修改了dockerFile,比如:RUN apt get install-y libmysqlclient dev VOLUME/var/lib/mysql RUN mkdir-p/var/RUN/mysqld RUN service mysql stop RUN usermod-d/var/lib/mysql RUN chown-R mysql:mysql/var/lib/mysql,但是仍然不能运行mysql,我做错了吗?对不起,我错过了前面添加的几个步骤。更新了答案,现在就试试。谢谢你,这很有效!体积似乎是解决这个问题的一个很好的方法,我会更深入地学习,然后尝试官方形象。是的。也许您可以创建一个命名卷&在创建容器时使用它,而不是将其放在Dockerfile中。你可以浏览官方图片的档案,以获得良好的洞察力。祝你好运