如何使用运行MySQL构建Docker容器?

pet*_*kas 6 mysql docker

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

$ 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> 
Run Code Online (Sandbox Code Playgroud)

这是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
Run Code Online (Sandbox Code Playgroud)

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

Wol*_*ahl 2

我尝试了你的设置

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

首先我得到了

E: Version '5.6.24*' for 'mysql-server' was not found
Run Code Online (Sandbox Code Playgroud)

这与你的问题无关,但需要修复。所以我注释掉了你的大部分 Dockerfile 并添加了:

RUN apt-get install mysql-server-5.5
Run Code Online (Sandbox Code Playgroud)

这给出了: E:无法找到包 mysql-server-5.5

这是特定于发行版的,所以我将 FROM 行更改为

FROM ubuntu:14.04
Run Code Online (Sandbox Code Playgroud)

我比较熟悉

然后我修改了Dockerfile来改变

RUN service mysql start
Run Code Online (Sandbox Code Playgroud)

CMD service mysql start
Run Code Online (Sandbox Code Playgroud)

正如 michaelbahr 的评论中提到的并检查过

./run 
Run Code Online (Sandbox Code Playgroud)

root@96ff34b4e0c0:/# service --status-all 2>&1 | grep mysql
Run Code Online (Sandbox Code Playgroud)

显示:

[ ? ]  mysql
Run Code Online (Sandbox Code Playgroud)

你就在那里 - mysql 运行。您可能需要相应地修复您的 Dockerfile。