如何build立一个运行MySQL的Docker容器?

我的目标是拥有一个运行MySQL服务的docker容器。 所以每次启动容器时,数据库都处于初始状态,MySQL正在运行。 几乎一切都很好,但是当我启动容器MySQL服务没有运行。 每次在控制台中,我必须像这样启动它:service mysql start。 以下是我如何构build和运行容器的步骤:

$ docker build -t executer:mysql . Sending build context to Docker daemon 15.87 kB Sending build context to Docker daemon Step 0 : FROM debian:wheezy # # ... Many steps without error # Step 17 : RUN mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/ ---> Using cache ---> 1c71bf4524f0 Step 18 : RUN service mysql start ---> Running in b4643765b79b ...... MySQL Community Server 5.6.24 is started. ---> ac26b749a3c0 Removing intermediate container b4643765b79b Successfully built ac26b749a3c0 $ docker run --rm -it executer:mysql /bin/bash root@1d9208c19af0:/# mysql ERROR 2002 (HY000): Cant connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) root@1d9208c19af0:/# service mysql start No directory, logging in with HOME=/ ...... [info] MySQL Community Server 5.6.24 is started. root@1d9208c19af0:/# mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.6.24 MySQL Community Server (GPL) Copyright (c) 2000, 2015, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> 

这里是Dockerfile的内容:

 FROM debian:wheezy # add our user and group first to make sure their IDs get assigned consistently, regardless of whatever dependencies get added RUN groupadd -r mysql && useradd -r -g mysql mysql # FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db: # File::Basename # File::Copy # Sys::Hostname # Data::Dumper RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/* # gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported RUN apt-key adv --keyserver pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5 ENV MYSQL_MAJOR 5.6 ENV MYSQL_VERSION 5.6.24 RUN echo "deb http://repo.mysql.com/apt/debian/ wheezy mysql-${MYSQL_MAJOR}" > /etc/apt/sources.list.d/mysql.list # the "/var/lib/mysql" stuff here is because the mysql-server postinst doesn't have an explicit way to disable the mysql_install_db codepath besides having a database already "configured" (ie, stuff in /var/lib/mysql/mysql) # also, we set debconf keys to make APT a little quieter RUN { \ echo mysql-community-server mysql-community-server/data-dir select ''; \ echo mysql-community-server mysql-community-server/root-pass password ''; \ echo mysql-community-server mysql-community-server/re-root-pass password ''; \ echo mysql-community-server mysql-community-server/remove-test-db select false; \ } | debconf-set-selections \ && apt-get update && apt-get install -y mysql-server="${MYSQL_VERSION}"* && rm -rf /var/lib/apt/lists/* \ && rm -rf /var/lib/mysql && mkdir -p /var/lib/mysql RUN apt-get update && apt-get install -y procps # comment out a few problematic configuration values RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf # VOLUME /var/lib/mysql # Install database ADD ./database.sql /var/db/database.sql # Set Standard settings ENV user student ENV password secret ENV url file:/var/db/database.sql ENV right READ # Install starting script ADD ./start-database.sh /usr/local/bin/start-database.sh RUN chmod +x /usr/local/bin/start-database.sh #EXPOSE 3306 RUN mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/ RUN service mysql start 

在运行我的容器后,我应该如何更改Dockerfile以运行MySQL服务?

我试过你的设置

https://github.com/BITPlan/docker-stackoverflowanswers/tree/master/33299303

首先我得到了

 E: Version '5.6.24*' for 'mysql-server' was not found 

这与你的问题没有任何关系,但需要修正。 所以我评论了你的大部分Dockerfile,并补充说:

 RUN apt-get install mysql-server-5.5 

这给了:E:找不到软件包mysql-server-5.5

这是特定的发行版,所以我改变了FROM行

 FROM ubuntu:14.04 

这是我更熟悉的

然后我修改了Dockerfile来改变

 RUN service mysql start 

 CMD service mysql start 

正如michaelbahr的评论中提到的和检查

 ./run 

 root@96ff34b4e0c0:/# service --status-all 2>&1 | grep mysql 

结果显示:

 [ ? ] mysql 

你有 – mysql运行。 您可能需要相应地修复您的Dockerfile。

另一种解决scheme是使用MySQL docker镜像: https : //hub.docker.com/_/mysql/

你所要做的就是:

 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag 

哪里:

  • some-mysql是你想分配给你的容器的名字

  • my-secret-pw是为MySQL根用户设置的密码

  • tag是指定MySQL版本的标签