mysql - Docker - 在构建阶段安全地设置 MySQL/MariaDB 根密码
问题描述
我正在尝试创建一个 docker build/compose,我可以在其中安全地在构建/运行时为我的 MariaDB 服务器设置 root 密码,而不必在 shell 中通过docker exec
. 我想成为一个完全不干涉的构建。
我已经尝试了多种方法来让它工作,包括 BuildKit 的秘密,但如果可能的话,我会尽量避免使用 Swarm。我读到可以使用它来做到这一点,docker compose
所以我为它编写了一个 YAML,但它似乎不起作用。
compose 似乎工作正常,但是当我尝试使用以下命令从转储更新我的数据库时(这个 exec 只是为了测试非常好,它不是放手的):
docker exec -i my_db_containter mysql -uroot -pmypassword < dbserver/sqlconfig/db_dump.sql
我收到此错误:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
任何人都可以发现我在这里可能做错了什么,是否能够提出一种替代解决方案来以这种方式设置服务器根密码?
--
编辑:在做了更多阅读之后,似乎这种方法也不是那么安全,因为它似乎只是在容器中安装了一个只读文件?有没有人对我如何自动安全地设置 MYSQL_ROOT_PASSWORD 有任何建议,理想情况下没有 swarm?如果 swarm 真的是唯一的选择,那么我想我可以调查一下。
--
这是我到目前为止所拥有的:
码头工人-compose.yaml:
version: '3.9'
services:
db:
build:
context: "./dbserver"
container_name: 'my_db_container'
environment:
MYSQL_DATABASE: 'my_db'
MYSQL_ROOT_PASSWORD: /run/secrets/dbrootpass
networks:
my_net:
ipv4_address: 203.0.113.88
secrets:
- dbrootpass
networks:
my_net:
ipam:
driver: default
config:
- subnet: "203.0.113.0/24"
secrets:
dbrootpass:
file: ./rootpass
根密码:
mypassword
解决方案
创建秘密:
$ read -p "Enter variable for MARIADB_ROOT_PASSWORD : " token && echo -n "$token" | podman secret create "MARIADB_PASSWORD" -
Enter variable for MARIADB_ROOT_PASSWORD : whynot
7f3b681f9a05729ad5b6af9d5
$ podman run --secret=MARIADB_ROOT_PASSWORD,type=env --secret=MARIADB_PASSWORD,type=env --env MARIADB_USER=bob mariadb:10.5
内部容器:
$ podman exec -ti funny_cohen bash
root@2583f8620571:/# ps -ef
UID PID PPID C STIME TTY TIME CMD
mysql 1 0 0 03:31 ? 00:00:00 mysqld
root 143 0 0 03:32 pts/0 00:00:00 bash
root 146 143 0 03:32 pts/0 00:00:00 ps -ef
root@2583f8620571:/# printenv
GPG_KEYS=177F4010FE56CA3336300305F1656F24C74CD1D8
PWD=/
MARIADB_USER=bob
container=podman
HOME=/root
MARIADB_VERSION=1:10.5.10+maria~focal
GOSU_VERSION=1.12
TERM=xterm
MARIADB_MAJOR=10.5
SHLVL=1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
_=/usr/bin/printenv
然而,它确实出现了podman inspect funny_cohen
。
推荐阅读
- python - 用熊猫删除/求和重复行
- c# - WCF 连接服务 reference.cs 文件更改参数格式
- google-cloud-firestore - Firestore 规则和带有变量键的自定义声明
- python - Python Flask 出错:jinja2.exceptions.UndefinedError: 'form' is undefined
- powerbi - 计算两列之间的差异 - Power BI 中的矩阵表
- binance - 每笔交易的币安保证金利息费用
- node.js - 使用 NodeJS 从 RabbitMQ 队列中读取所有消息
- c# - How to raise NotifyCollectionChangedEventArgs with XUnit
- sql - .*(点星)在 SQL 中是什么意思?
- android - 尝试在 android studio 中设置 firestore 时应用程序在启动后崩溃