首页 > 解决方案 > 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

标签: mysqldocker

解决方案


即使您的应用程序位于本地 docker 网络中,您也应该始终致力于在 MySQL 上使用强密码。

您永远不知道将来您的应用程序环境何时发生变化,或者什么用户将在某个时候访问该本地网络。

幸运的是,使用 Docker swarm 和 Docker compose 非常容易使用机密(它们是非常简单的文件,其中包含安装在容器中 /secrets 目录中的密码)。

在此处查看示例:https ://blog.ruanbekker.com/blog/2017/11/23/use-docker-secrets-with-mysql-on-docker-swarm/


推荐阅读