mysql - Docker 中 MySQL 密码的最佳实践
问题描述
我目前正在使用 docker 容器和 mysql 数据库。每个应用程序在自己的 docker 容器中都有自己的 mysql 数据库。应用程序和数据库共享一个网络,应用程序本身通过另一个网络(traefik)访问。这意味着无法从外部访问 mysql 数据库。为 mysql 实例设置安全密码有多重要?有最佳做法吗?
更新:现在使用 Docker 机密
这是我与 nextcloud 一起使用的示例docker- compose.yaml:
services:
nextcloud-db:
image: mariadb
container_name: nextcloud-db
command: --transaction-isolation=READ-COMMITTED --log-bin=ROW
restart: unless-stopped
volumes:
- /opt/docker/nextcloud/database:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD_FILE: /run/secrets/mysql_root_password
MYSQL_PASSWORD_FILE: /run/secrets/mysql_user_password
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_INITDB_SKIP_TZINFO: 1
secrets:
- mysql_root_password
- mysql_user_password
secrets:
mysql_root_password:
file: /opt/docker/secrets/mysql_root_password
mysql_user_password:
file: /opt/docker/secrets/mysql_user_password
您可以使用以下命令创建秘密文件:
openssl rand -base64 32 > /opt/docker/secrets/mysql_root_password
openssl rand -base64 32 > /opt/docker/secrets/mysql_user_password
解决方案
即使您的应用程序位于本地 docker 网络中,您也应该始终致力于在 MySQL 上使用强密码。
您永远不知道将来您的应用程序环境何时发生变化,或者什么用户将在某个时候访问该本地网络。
幸运的是,使用 Docker swarm 和 Docker compose 非常容易使用机密(它们是非常简单的文件,其中包含安装在容器中 /secrets 目录中的密码)。
在此处查看示例:https ://blog.ruanbekker.com/blog/2017/11/23/use-docker-secrets-with-mysql-on-docker-swarm/
推荐阅读
- tally - 我已经在 Tally Developer 9.Working Properly 中创建了 SMS 模块,但我的要求是多个项目选择而不是消息不正确的方式
- oop - 从非抽象类继承
- angular - 我想知道为什么 dist 文件夹的大小大于 src 的角度?
- python - 为什么 Pandas 拒绝读取 9 个世纪以后的日期?
- redirect - 如何将托管在 Heroku 上的 nextjs 应用程序从 http 重定向到 https?
- python - 从 django 以 html 格式显示数据
- r - 错误:y 中的观察数不等于 x 的行数
- android - 如何在android中旋转按钮的文本?
- sql-server - T-SQL:这个 SQL 查询检查日期条件应该如何概括(而不是硬编码)?
- angular - 在 Angular 中使用 ngIf 进行条件渲染