MariaDb Docker容器运行失败,原因是什么?

6yoyoihd  于 2023-01-20  发布在  Docker
关注(0)|答案(2)|浏览(267)

Docker日志:

我使用powershell脚本来运行容器:

docker rm ctnr-mariadb --force
docker pull mariadb:latest
docker run --name ctnr-mariadb -e MYSQL_ROOT_PASSWORD=example -e MARIADB_USER=user -e MARIADB_PASSWORD=password -e MARIADB_DATABASE=repo -p 1234:3306 -detach mariadb -v sql/init.sql:/docker-entrypoint-initdb.d/init.sql

在init.sql中有以下脚本

`CREATE TABLE `Contacts` (
  `Id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `Name` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;`

我的目标只是用一些sql脚本初始化一个maria数据库容器,引导数据库和表。我不知道根据日志消息该怎么做。

yhqotfr8

yhqotfr81#

您的SQL-File不是用于配置mariadb示例的文件。您可以像下面的代码片段一样拆分命令:

docker rm ctnr-mariadb --force
docker pull mariadb:latest
docker run --name ctnr-mariadb -e MYSQL_ROOT_PASSWORD=example -e MARIADB_USER=user -e MARIADB_PASSWORD=password -e MARIADB_DATABASE=repo -p 1234:3306 -detach mariadb
docker exec -i ctnr-mariadb sh -c 'exec mariadb -uroot -pexample repo' < ./sql/init.sql

注意:我已经在最后一个命令中硬编码了环境变量。

oknrviil

oknrviil2#

根据docker rundocumentation,所有Docker参数必须放在映像名称之前。映像名称之后的所有内容都是要在映像内运行的命令(相当于Dockerfile中的CMD)。
记住这一点,您的docker run命令应该是:

docker run --name ctnr-mariadb -e MYSQL_ROOT_PASSWORD=example -e MARIADB_USER=user -e MARIADB_PASSWORD=password -e MARIADB_DATABASE=repo -p 1234:3306 --detach -v sql/init.sql:/docker-entrypoint-initdb.d/init.sql mariadb

相关问题