【发布时间】:2023-04-05 17:18:02
【问题描述】:
我是 docker 新手,想尝试在 Swarm 上通过 MySql 容器使用 docker secrets。
我使用 docker-compose.yml 启动 MySql。并在此处使用 .sql 脚本:
我在 docker-swarm 上使用最新版本的 debian。我在 CLI 中使用 echo "password" 创建了秘密 | docker-secret 创建“秘密”-
脚本在这里:
I'm in docker-swarm on debian with latest versions. I created secrets in CLI with echo "password" | docker-secret create "secret" -
And the script is here :
CREATE DATABASE IF NOT EXISTS mailserver
CHARACTER SET = 'utf8mb4';
USE mailserver;
CREATE TABLE IF NOT EXISTS `virtual_domains` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
USE mailserver;
CREATE TABLE IF NOT EXISTS `virtual_users` (
`id` int(11) NOT NULL auto_increment,
`domain_id` int(11) NOT NULL,
`email` varchar(100) NOT NULL,
`password` varchar(150) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
USE mailserver;
CREATE TABLE IF NOT EXISTS `virtual_aliases` (
`id` int(11) NOT NULL auto_increment,
`domain_id` int(11) NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES virtual_domains(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE USER 'mailadmin'@'%' IDENTIFIED BY $("/run/secrets/mysql_mailadmin_passwd");
GRANT ALL PRIVILEGES ON `mailserver`.* TO 'mailadmin'@'%';
CREATE USER 'mailuser'@'%' IDENTIFIED BY $("/run/secrets/mysql_mailuser_passwd");
GRANT ALL PRIVILEGES ON `mailserver`.* TO 'mailuser'@'%';
FLUSH PRIVILEGES;
用户创建语句,放置在传递给入口点的script.sql文件中。该文件成功创建了数据库、表,但由于机密而导致用户失败。
我尝试在脚本中使用cat $("/run/secrets/mysql_mailadmin_passwd")
CREATE USER 'mailadmin'@'%' IDENTIFIED BY XXXXXXXXXXXXX ;
GRANT ALL PRIVILEGES ON `mailserver`.* TO 'mailadmin'@'%';
经过多次尝试,日志一直说我的 sql 语法有一个“错误”。
【问题讨论】:
-
你能解释更多吗?你的码头工人长什么样?你的剧本是什么?
-
确切的错误是什么?
-
cat /run/secrets/mysql_mailadmin_passwd打印什么? -
ERROR 1064 (42000) at line 33: 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '/run/secrets/mysql_mailadmin 附近使用正确的语法,并且秘密以明文形式传递:当我登录容器时,我可以从 shell 中捕获它并显示字符串
标签: mysql