Skip to content
Closed

test #26

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
8d14666
Fixed security issue
ltangvald Mar 4, 2015
3682b46
Changed to use oraclelinux as base image
ltangvald Mar 9, 2015
82e016d
Updated for 5.7.6
ltangvald Mar 11, 2015
2c54da1
* Fix whitespace inconsistencies
ltangvald Mar 16, 2015
4cef759
- Check if junk files are present before trying to delete
ltangvald Mar 17, 2015
1a3490b
Removed routing of error logging to std out
ltangvald Mar 17, 2015
0542209
fix issue with fabric: http://bugs.mysql.com/bug.php?id=72281
ioggstream Apr 2, 2015
9dd8a7c
Merge pull request #1 from ioggstream/fix-gtid-issue-oracle
ltangvald Apr 8, 2015
bc3e14e
Add change from #1 to other entrypoint scripts
ltangvald Apr 8, 2015
6883f95
Update to 5.5.43 and 5.6.24
ltangvald Apr 8, 2015
34227a3
Updated to 5.7.7 RC
ltangvald Apr 8, 2015
d7d54b7
Changed ENV format to work with older versions of Docker
ltangvald Apr 9, 2015
aed197a
Version updates
ltangvald Jun 2, 2015
dda9ce8
Use --innodb-read-only to avoid writing junk files when parsing verbo…
ltangvald Jun 2, 2015
7f9f87c
More consistent variable quoting
ltangvald Jun 11, 2015
4b6dee8
Removed unnecessary directory check
ltangvald Jun 11, 2015
6cc10f6
Updated to versions 5.5.45, 5.6.26 and 5.7.8
ltangvald Aug 4, 2015
96b7fa6
Added some very simple sanity check scripts for updating to new serve…
ltangvald Aug 13, 2015
a00c17c
Merge branch 'master' into mysql-server
ltangvald Aug 17, 2015
1b0df69
Update package url for new rpms
Aug 21, 2015
23c46e2
Fixed support for empty password
ltangvald Aug 24, 2015
f59758a
Test script fix
ltangvald Sep 9, 2015
aede72a
Added missing test sql
ltangvald Sep 9, 2015
6008853
Updated 5.5 to 5.5.46
gipulla Oct 1, 2015
e860e46
Updated 5.6 to 5.6.27
Oct 2, 2015
79fe3ef
Merge branch 'mysql-server' of https://github.com/mysql/mysql-docker …
Oct 2, 2015
59d2a1f
Updated 5.7 to 5.7.9
Oct 22, 2015
10f65e6
Removed --innodb-read-only
ltangvald Oct 26, 2015
07fbe13
Added workaround for MySQL Bug #78957
ltangvald Oct 27, 2015
fed8140
Added security options
ltangvald Nov 5, 2015
d4ca081
Put image documentation in README.md
ltangvald Nov 17, 2015
90504e5
Updated README
ltangvald Nov 24, 2015
c22ce30
Bug#79374 user `mysql.sys` is removed from docker deployment
ltangvald Nov 25, 2015
1aa826b
Updated README
ltangvald Dec 7, 2015
68c9658
Updated 5.6 to 5.6.28
Dec 7, 2015
0b81a81
Updated 5.7 to 5.7.10
Dec 8, 2015
d98d7ab
Fixed 5.6.28 URL
Dec 8, 2015
cda06e6
Updated 5.5 to 5.5.47
Dec 8, 2015
1cbaef6
Merge branch 'mysql-server' of https://github.com/mysql/mysql-docker …
Dec 8, 2015
0473555
Added a way to store root password in a file
ltangvald Feb 1, 2016
e4a2af8
Updated 5.5 to 5.5.48
Feb 5, 2016
6071fbb
Updated 5.6 to 5.6.29
Feb 5, 2016
e6c8c80
Updated 5.7 to 5.7.11
Feb 6, 2016
77e9d96
Updated 5.5 to 5.5.49
Apr 11, 2016
3eb1ef9
Updated 5.6 to 5.6.30
Apr 11, 2016
af76781
Updated 5.7 to 5.7.12
Apr 12, 2016
5a1608f
Expose port 33060 to allow connections from MySQL Shell
ltangvald Apr 22, 2016
1fee5fc
Updated readme for password from file
ltangvald Feb 10, 2016
7e58f0d
Bug#81415 Docker image fails to start with log-bin in config and serv…
ltangvald May 26, 2016
1b1e67d
Updated 5.5 to 5.5.50
Jun 2, 2016
8b5380f
Updated 5.6 to 5.6.31
Jun 2, 2016
b5a39bf
Updated 5.7 to 5.7.13
Jun 2, 2016
c0915f7
Fix for bug#81723
datacharmer Jun 4, 2016
478010b
Merge pull request #2 from datacharmer/patch-1
ltangvald Jun 6, 2016
56d263f
Revert "Fix for bug#81723"
ltangvald Jun 7, 2016
da99dee
Merge pull request #3 from mysql/revert-2-patch-1
ltangvald Jun 7, 2016
9108dcf
Fix for bug#81723
datacharmer Jun 7, 2016
56d1d35
Updated 5.5 to 5.5.51
Jul 29, 2016
1fbd1d9
Updated 5.7 to 5.7.14
Jul 30, 2016
27438b0
Updated 5.6 to 5.6.32
Jul 30, 2016
05833af
Add an early check for whether server can start, to detect config err…
Aug 17, 2016
08835d1
Updated 5.5 to 5.5.52
Sep 6, 2016
63b7584
Updated 5.7 to 5.7.15
Sep 6, 2016
1632cc8
Updated 5.6 to 5.6.33
Sep 7, 2016
938f20a
Added 8.0 build
ltangvald Aug 24, 2016
14ffaf7
Updated 8.0 to 8.0.0
Sep 13, 2016
1d65ebf
Updated README for 8.0 preview release.
ltangvald Sep 15, 2016
1397883
Change oraclelinux dependency from latest to 7 to avoid any surprise …
ltangvald Oct 4, 2016
d663918
Updated 5.6 to 5.6.34
Oct 12, 2016
8507d38
Updated 5.5 to 5.5.53
Oct 12, 2016
63917ec
Updated 5.7 to 5.7.16
Oct 13, 2016
6fbb227
Restrict host access for root user
ltangvald Nov 22, 2016
e28da83
Updated readme file for MYSQL_ROOT_HOST setting
ltangvald Nov 22, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 0 additions & 26 deletions .travis.yml

This file was deleted.

56 changes: 8 additions & 48 deletions 5.5/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,59 +1,19 @@
FROM debian:wheezy
FROM oraclelinux:7

# 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
ENV PACKAGE_URL https://repo.mysql.com/yum/mysql-5.5-community/docker/x86_64/mysql-community-server-minimal-5.5.53-2.el7.x86_64.rpm

# Install server
RUN rpmkeys --import http://repo.mysql.com/RPM-GPG-KEY-mysql \
&& yum install -y $PACKAGE_URL \
&& yum install -y libpwquality \
&& rm -rf /var/cache/yum/*
RUN mkdir /docker-entrypoint-initdb.d

# 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/*

# mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
RUN apt-get update && apt-get install -y libaio1 && rm -rf /var/lib/apt/lists/*

# gpg: key 5072E1F5: public key "MySQL Release Engineering <[email protected]>" imported
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5

ENV MYSQL_MAJOR 5.5
ENV MYSQL_VERSION 5.5.45

# note: we're pulling the *.asc file from mysql.he.net instead of dev.mysql.com because the official mirror 404s that file for whatever reason - maybe it's at a different path?
RUN apt-get update && apt-get install -y curl --no-install-recommends && rm -rf /var/lib/apt/lists/* \
&& curl -SL "http://dev.mysql.com/get/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux2.6-x86_64.tar.gz" -o mysql.tar.gz \
&& curl -SL "http://mysql.he.net/Downloads/MySQL-$MYSQL_MAJOR/mysql-$MYSQL_VERSION-linux2.6-x86_64.tar.gz.asc" -o mysql.tar.gz.asc \
&& apt-get purge -y --auto-remove curl \
&& gpg --verify mysql.tar.gz.asc \
&& mkdir /usr/local/mysql \
&& tar -xzf mysql.tar.gz -C /usr/local/mysql --strip-components=1 \
&& rm mysql.tar.gz* \
&& rm -rf /usr/local/mysql/mysql-test /usr/local/mysql/sql-bench \
&& rm -rf /usr/local/mysql/bin/*-debug /usr/local/mysql/bin/*_embedded \
&& find /usr/local/mysql -type f -name "*.a" -delete \
&& apt-get update && apt-get install -y binutils && rm -rf /var/lib/apt/lists/* \
&& { find /usr/local/mysql -type f -executable -exec strip --strip-all '{}' + || true; } \
&& apt-get purge -y --auto-remove binutils
ENV PATH $PATH:/usr/local/mysql/bin:/usr/local/mysql/scripts

# replicate some of the way the APT package configuration works
# this is only for 5.5 since it doesn't have an APT repo, and will go away when 5.5 does
RUN mkdir -p /etc/mysql/conf.d \
&& { \
echo '[mysqld]'; \
echo 'skip-host-cache'; \
echo 'skip-name-resolve'; \
echo 'user = mysql'; \
echo 'datadir = /var/lib/mysql'; \
echo '!includedir /etc/mysql/conf.d/'; \
} > /etc/mysql/my.cnf

VOLUME /var/lib/mysql

COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

EXPOSE 3306
CMD ["mysqld"]

46 changes: 35 additions & 11 deletions 5.5/docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,37 @@ if [ "${1:0:1}" = '-' ]; then
fi

if [ "$1" = 'mysqld' ]; then
# Test we're able to startup without errors. We redirect stdout to /dev/null so
# only the error messages are left.
result=0
output=$("$@" --verbose --help 2>&1 > /dev/null) || result=$?
if [ ! "$result" = "0" ]; then
echo >&2 'error: could not run mysql. This could be caused by a misconfigured my.cnf'
echo >&2 "$output"
exit 1
fi

# Get config
DATADIR="$("$@" --verbose --help 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"

if [ ! -d "$DATADIR/mysql" ]; then
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
echo >&2 ' Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
echo >&2 'error: database is uninitialized and password option is not specified '
echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
exit 1
fi

# If the password variable is a filename we use the contents of the file
if [ -f "$MYSQL_ROOT_PASSWORD" ]; then
MYSQL_ROOT_PASSWORD="$(cat $MYSQL_ROOT_PASSWORD)"
fi
mkdir -p "$DATADIR"
chown -R mysql:mysql "$DATADIR"

echo 'Running mysql_install_db'
mysql_install_db --user=mysql --datadir="$DATADIR" --rpm --basedir=/usr/local/mysql
mysql_install_db --user=mysql --datadir="$DATADIR" --rpm
echo 'Finished mysql_install_db'

mysqld --user=mysql --datadir="$DATADIR" --skip-networking --basedir=/usr/local/mysql &
"$@" --skip-networking &
pid="$!"

mysql=( mysql --protocol=socket -uroot )
Expand All @@ -43,18 +56,29 @@ if [ "$1" = 'mysqld' ]; then

mysql_tzinfo_to_sql /usr/share/zoneinfo | "${mysql[@]}" mysql

if [ ! -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
MYSQL_ROOT_PASSWORD="$(pwmake 128)"
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
fi
if [ -z "$MYSQL_ROOT_HOST" ]; then
ROOTCREATE="SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}');"
else
ROOTCREATE="SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}'); \
CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'; \
GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ;"
fi
"${mysql[@]}" <<-EOSQL
-- What's done in this file shouldn't be replicated
-- or products like mysql-fabric won't work
SET @@SESSION.SQL_LOG_BIN=0;

DELETE FROM mysql.user ;
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost');
${ROOTCREATE}
DROP DATABASE IF EXISTS test ;
FLUSH PRIVILEGES ;
EOSQL
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
if [ ! -z "$MYSQL_ROOT_PASSWORD" ]; then
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
fi

if [ "$MYSQL_DATABASE" ]; then
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}"
Expand Down
44 changes: 9 additions & 35 deletions 5.6/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,41 +1,14 @@
FROM debian:wheezy
FROM oraclelinux:7

# 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
ENV PACKAGE_URL https://repo.mysql.com/yum/mysql-5.6-community/docker/x86_64/mysql-community-server-minimal-5.6.34-2.el7.x86_64.rpm

RUN mkdir /docker-entrypoint-initdb.d

# 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 <[email protected]>" imported
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5

ENV MYSQL_MAJOR 5.6
ENV MYSQL_VERSION 5.6.26
# Install server
RUN rpmkeys --import http://repo.mysql.com/RPM-GPG-KEY-mysql \
&& yum install -y $PACKAGE_URL \
&& yum install -y libpwquality \
&& rm -rf /var/cache/yum/*

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

# comment out a few problematic configuration values
# don't reverse lookup hostnames, they are usually another container
RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf \
&& echo 'skip-host-cache\nskip-name-resolve' | awk '{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }' /etc/mysql/my.cnf > /tmp/my.cnf \
&& mv /tmp/my.cnf /etc/mysql/my.cnf
RUN mkdir /docker-entrypoint-initdb.d

VOLUME /var/lib/mysql

Expand All @@ -44,3 +17,4 @@ ENTRYPOINT ["/entrypoint.sh"]

EXPOSE 3306
CMD ["mysqld"]

49 changes: 39 additions & 10 deletions 5.6/docker-entrypoint.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,24 +7,37 @@ if [ "${1:0:1}" = '-' ]; then
fi

if [ "$1" = 'mysqld' ]; then
# Test we're able to startup without errors. We redirect stdout to /dev/null so
# only the error messages are left.
result=0
output=$("$@" --verbose --help 2>&1 > /dev/null) || result=$?
if [ ! "$result" = "0" ]; then
echo >&2 'error: could not run mysql. This could be caused by a misconfigured my.cnf'
echo >&2 "$output"
exit 1
fi

# Get config
DATADIR="$("$@" --verbose --help 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"

if [ ! -d "$DATADIR/mysql" ]; then
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
echo >&2 ' Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
echo >&2 'error: database is uninitialized and password option is not specified '
echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
exit 1
fi

# If the password variable is a filename we use the contents of the file
if [ -f "$MYSQL_ROOT_PASSWORD" ]; then
MYSQL_ROOT_PASSWORD="$(cat $MYSQL_ROOT_PASSWORD)"
fi
mkdir -p "$DATADIR"
chown -R mysql:mysql "$DATADIR"

echo 'Running mysql_install_db'
mysql_install_db --user=mysql --datadir="$DATADIR" --rpm --keep-my-cnf
echo 'Finished mysql_install_db'

mysqld --user=mysql --datadir="$DATADIR" --skip-networking &
"$@" --skip-networking &
pid="$!"

mysql=( mysql --protocol=socket -uroot )
Expand All @@ -44,18 +57,29 @@ if [ "$1" = 'mysqld' ]; then
# sed is for https://bugs.mysql.com/bug.php?id=20545
mysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | "${mysql[@]}" mysql

if [ ! -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
MYSQL_ROOT_PASSWORD="$(pwmake 128)"
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
fi
if [ -z "$MYSQL_ROOT_HOST" ]; then
ROOTCREATE="SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}');"
else
ROOTCREATE="SET PASSWORD FOR 'root'@'localhost'=PASSWORD('${MYSQL_ROOT_PASSWORD}'); \
CREATE USER 'root'@'${MYSQL_ROOT_HOST}' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}'; \
GRANT ALL ON *.* TO 'root'@'${MYSQL_ROOT_HOST}' WITH GRANT OPTION ;"
fi
"${mysql[@]}" <<-EOSQL
-- What's done in this file shouldn't be replicated
-- or products like mysql-fabric won't work
SET @@SESSION.SQL_LOG_BIN=0;

DELETE FROM mysql.user ;
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
DELETE FROM mysql.user WHERE user NOT IN ('mysql.sys', 'mysqlxsys', 'root') OR host NOT IN ('localhost');
${ROOTCREATE}
DROP DATABASE IF EXISTS test ;
FLUSH PRIVILEGES ;
EOSQL
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
if [ ! -z "$MYSQL_ROOT_PASSWORD" ]; then
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
fi

if [ "$MYSQL_DATABASE" ]; then
echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}"
Expand All @@ -82,6 +106,11 @@ if [ "$1" = 'mysqld' ]; then
echo
done

if [ ! -z "$MYSQL_ONETIME_PASSWORD" ]; then
"${mysql[@]}" <<-EOSQL
ALTER USER 'root'@'%' PASSWORD EXPIRE;
EOSQL
fi
if ! kill -s TERM "$pid" || ! wait "$pid"; then
echo >&2 'MySQL init process failed.'
exit 1
Expand Down
48 changes: 10 additions & 38 deletions 5.7/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,46 +1,18 @@
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

FROM oraclelinux:7
ENV PACKAGE_URL https://repo.mysql.com/yum/mysql-5.7-community/docker/x86_64/mysql-community-server-minimal-5.7.16-1.el7.x86_64.rpm

# Install server
RUN rpmkeys --import http://repo.mysql.com/RPM-GPG-KEY-mysql \
&& yum install -y $PACKAGE_URL \
&& yum install -y libpwquality \
&& rm -rf /var/cache/yum/*
RUN mkdir /docker-entrypoint-initdb.d

# 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 <[email protected]>" imported
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5

ENV MYSQL_MAJOR 5.7
ENV MYSQL_VERSION 5.7.8-rc

RUN echo "deb http://repo.mysql.com/apt/debian/ wheezy mysql-${MYSQL_MAJOR}-dmr" > /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

# comment out a few problematic configuration values
# don't reverse lookup hostnames, they are usually another container
RUN sed -Ei 's/^(bind-address|log)/#&/' /etc/mysql/my.cnf \
&& echo 'skip-host-cache\nskip-name-resolve' | awk '{ print } $1 == "[mysqld]" && c == 0 { c = 1; system("cat") }' /etc/mysql/my.cnf > /tmp/my.cnf \
&& mv /tmp/my.cnf /etc/mysql/my.cnf

VOLUME /var/lib/mysql

COPY docker-entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

EXPOSE 3306
EXPOSE 3306 33060
CMD ["mysqld"]

Loading