如何保证容器运行的Mysql8数据库密码的安全
·
一、 概述
mysql是我们开发中常使用的数据库,如何快速安装mysql服务是开发人员必备的技能,而使用docker来安装mysql无疑是最为快捷的方式。
二、docker安装mysql
1、编排文件
docker-compose.yml
services:
mysql8:
image: mysql:8.0
container_name: mysql8
deploy:
resources:
limits:
cpus: '1'
memory: 400M
reservations:
memory: 300M
volumes:
- ./mysql8:/var/lib/mysql/
- ./init:/docker-entrypoint-initdb.d/
ports:
- 23306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: root123
MYSQL_USER: test
MYSQL_PASSWORD: test123
MYSQL_DATABASE: test
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
restart: on-failure
logging:
driver: 'json-file'
options:
max-size: '5m'
max-file: '1'
2、启动脚本
restart.sh
#!/bin/bash
docker-compose down && docker-compose up -d
3、存在的问题
假如你是通过云主机部署了mysql服务,并且开通了外网访问权限。
以下问题是你不得不重视的:
- 编排文件环境变量部分,暴露了数据的密码
- 编排文件ports部分,暴露了访问端口
任何人都可以通过 ${ip}:23306 、用户名root 密码root123访问到你的数据库,安全无从谈起。
三、改进措施
1、修改编排文件
引用.env变量
services:
mysql8:
image: mysql:8.0
container_name: mysql8
deploy:
resources:
limits:
cpus: '1'
memory: 400M
reservations:
memory: 300M
volumes:
- ./mysql8:/var/lib/mysql/
- ./init:/docker-entrypoint-initdb.d/
ports:
- 23306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_USER: test
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: test
command:
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
restart: on-failure
logging:
driver: 'json-file'
options:
max-size: '5m'
max-file: '1'
2、动态生成.env文件
create_env_001.sh
#!/bin/sh
echo "# update by 00fly at `date +"%Y-%m-%d %H:%M:%S"`" > .env
echo "MYSQL_ROOT_PASSWORD=`openssl rand -base64 9`" >> .env
echo "MYSQL_PASSWORD=`openssl rand -base64 9`" >> .env
cat .env
运行结果
[root@00fly work]# sh create_env_001.sh
# update by 00fly at 2026-02-11 18:08:49
MYSQL_ROOT_PASSWORD=mchz2ProUd03
MYSQL_PASSWORD=SSuHpAenJcc9
这样处理后,只有拥有服务器访问权限的用户才能查看数据库密码,保证了安全!
3、源码放送
https://gitee.com/00fly/docker-run/tree/master/compose/mysql8
有任何问题和建议,都可以向我提问讨论,大家一起进步,谢谢!
-over-
更多推荐

所有评论(0)