我正在尝试创建一个docker构建/组合,在这里我可以在构建/运行时安全地为MariaDB服务器设置根密码,而不必通过docker exec
在shell中手动设置。我想成为一个完全放手的人。
我已经尝试了多种方法来实现这一点,包括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有什么建议吗?如果蜂群真的是唯一的选择,那么我想我可以调查一下
--
以下是我目前所拥有的:
docker-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
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
中。