Skip to content

Commit 087cca9

Browse files
committed
Merge pull request #119 from mysql/master
Added security options
2 parents 5ea3383 + 6871ce6 commit 087cca9

File tree

6 files changed

+35
-15
lines changed

6 files changed

+35
-15
lines changed

5.5/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ RUN mkdir /docker-entrypoint-initdb.d
1313
RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/*
1414

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

1818
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
1919
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5

5.5/docker-entrypoint.sh

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@ if [ "$1" = 'mysqld' ]; then
1111
DATADIR="$("$@" --verbose --help 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"
1212

1313
if [ ! -d "$DATADIR/mysql" ]; then
14-
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
15-
echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
16-
echo >&2 ' Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'
14+
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
15+
echo >&2 'error: database is uninitialized and password option is not specified '
16+
echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
1717
exit 1
1818
fi
19-
2019
mkdir -p "$DATADIR"
2120
chown -R mysql:mysql "$DATADIR"
2221

@@ -46,6 +45,10 @@ if [ "$1" = 'mysqld' ]; then
4645
mysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | "${mysql[@]}" mysql
4746
fi
4847

48+
if [ ! -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
49+
MYSQL_ROOT_PASSWORD="$(pwgen -1 32)"
50+
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
51+
fi
4952
"${mysql[@]}" <<-EOSQL
5053
-- What's done in this file shouldn't be replicated
5154
-- or products like mysql-fabric won't work

5.6/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ RUN mkdir /docker-entrypoint-initdb.d
1010
# File::Copy
1111
# Sys::Hostname
1212
# Data::Dumper
13-
RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/*
13+
RUN apt-get update && apt-get install -y perl pwgen --no-install-recommends && rm -rf /var/lib/apt/lists/*
1414

1515
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
1616
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5

5.6/docker-entrypoint.sh

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,11 @@ if [ "$1" = 'mysqld' ]; then
1111
DATADIR="$("$@" --verbose --help 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"
1212

1313
if [ ! -d "$DATADIR/mysql" ]; then
14-
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" ]; then
15-
echo >&2 'error: database is uninitialized and MYSQL_ROOT_PASSWORD not set'
16-
echo >&2 ' Did you forget to add -e MYSQL_ROOT_PASSWORD=... ?'
14+
if [ -z "$MYSQL_ROOT_PASSWORD" -a -z "$MYSQL_ALLOW_EMPTY_PASSWORD" -a -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
15+
echo >&2 'error: database is uninitialized and password option is not specified '
16+
echo >&2 ' You need to specify one of MYSQL_ROOT_PASSWORD, MYSQL_ALLOW_EMPTY_PASSWORD and MYSQL_RANDOM_ROOT_PASSWORD'
1717
exit 1
1818
fi
19-
2019
mkdir -p "$DATADIR"
2120
chown -R mysql:mysql "$DATADIR"
2221

@@ -46,6 +45,10 @@ if [ "$1" = 'mysqld' ]; then
4645
mysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | "${mysql[@]}" mysql
4746
fi
4847

48+
if [ ! -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
49+
MYSQL_ROOT_PASSWORD="$(pwgen -1 32)"
50+
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
51+
fi
4952
"${mysql[@]}" <<-EOSQL
5053
-- What's done in this file shouldn't be replicated
5154
-- or products like mysql-fabric won't work
@@ -87,6 +90,11 @@ if [ "$1" = 'mysqld' ]; then
8790
echo
8891
done
8992

93+
if [ ! -z "$MYSQL_ONETIME_PASSWORD" ]; then
94+
"${mysql[@]}" <<-EOSQL
95+
ALTER USER 'root'@'%' PASSWORD EXPIRE;
96+
EOSQL
97+
fi
9098
if ! kill -s TERM "$pid" || ! wait "$pid"; then
9199
echo >&2 'MySQL init process failed.'
92100
exit 1

5.7/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ RUN mkdir /docker-entrypoint-initdb.d
1010
# File::Copy
1111
# Sys::Hostname
1212
# Data::Dumper
13-
RUN apt-get update && apt-get install -y perl --no-install-recommends && rm -rf /var/lib/apt/lists/*
13+
RUN apt-get update && apt-get install -y perl pwgen --no-install-recommends && rm -rf /var/lib/apt/lists/*
1414

1515
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
1616
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys A4A9406876FCBD3C456770C88C718D3B5072E1F5

5.7/docker-entrypoint.sh

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ if [ "$1" = 'mysqld' ]; then
1111
DATADIR="$("$@" --verbose --help 2>/dev/null | awk '$1 == "datadir" { print $2; exit }')"
1212

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

@@ -46,6 +46,11 @@ if [ "$1" = 'mysqld' ]; then
4646
mysql_tzinfo_to_sql /usr/share/zoneinfo | sed 's/Local time zone must be set--see zic manual page/FCTY/' | "${mysql[@]}" mysql
4747
fi
4848

49+
50+
if [ ! -z "$MYSQL_RANDOM_ROOT_PASSWORD" ]; then
51+
MYSQL_ROOT_PASSWORD="$(pwgen -1 32)"
52+
echo "GENERATED ROOT PASSWORD: $MYSQL_ROOT_PASSWORD"
53+
fi
4954
"${mysql[@]}" <<-EOSQL
5055
-- What's done in this file shouldn't be replicated
5156
-- or products like mysql-fabric won't work
@@ -76,7 +81,6 @@ if [ "$1" = 'mysqld' ]; then
7681

7782
echo 'FLUSH PRIVILEGES ;' | "${mysql[@]}"
7883
fi
79-
8084
echo
8185
for f in /docker-entrypoint-initdb.d/*; do
8286
case "$f" in
@@ -87,6 +91,11 @@ if [ "$1" = 'mysqld' ]; then
8791
echo
8892
done
8993

94+
if [ ! -z "$MYSQL_ONETIME_PASSWORD" ]; then
95+
"${mysql[@]}" <<-EOSQL
96+
ALTER USER 'root'@'%' PASSWORD EXPIRE;
97+
EOSQL
98+
fi
9099
if ! kill -s TERM "$pid" || ! wait "$pid"; then
91100
echo >&2 'MySQL init process failed.'
92101
exit 1

0 commit comments

Comments
 (0)