Can';t在容器内运行mysql,容器使用dockerFile构建映像
我试图用dockerFile构建一个mysql映像。 以下是我的代码: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
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中。你可以浏览官方图片的档案,以获得良好的洞察力。祝你好运