无法在Dockerfile中构buildmariaDB基础
我目前被封锁,我想build立一个数据库,当我build立一个Dockerfile。 但是我得到一个错误,我不明白为什么。 谢谢你的帮助。
在这里我的Dockerfile
FROM mariadb:latest WORKDIR /sql-files ADD sql/ /sql-files/ ENV MYSQL_ROOT_PASSWORD test123 ENV MYSQL_DATABASE testDB ENV MYSQL_USER toto ENV MYSQL_PASSWORD test123 RUN apt-get update && apt-get -y install vim && chmod +x insertDB.sh && sh insertDB.sh EXPOSE 3306
在这里我的insertDB.sh
#!/bin/sh /usr/bin/mysqld_safe --skip-grant-tables & sleep 5 mysql --user=$MYSQL_USER --password=$MYSQL_PASSWORD $MYSQL_DATABASE < test.sql
和finaly我的test.sql脚本
CREATE TABLE IF NOT EXISTS test ( id int NOT NULL AUTO_INCREMENT, name varchar(32) NOT NULL, PRIMARY KEY (id) ); INSERT INTO test (name) VALUES ('Toto'), ('Jack'), ('Titi');
所以当我执行我的docker文件与命令docker build -t maria .
我得到这个错误:
Processing triggers for libc-bin (2.19-18+deb8u10) ... 171112 18:12:53 mysqld_safe Logging to syslog. 171112 18:12:54 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql ERROR 1049 (42000): Unknown database 'testDB' The command '/bin/sh -c apt-get update && apt-get -y install vim && chmod +x insertDB.sh && sh insertDB.sh' returned a non-zero code: 1
我错过了什么?
使用dockerhub的mariadb图像比您尝试的更简单。
如“初始化新实例部分”中所述:
首次启动容器时,将使用提供的configurationvariables创build并初始化具有指定名称的新数据库。 此外,它将执行在/docker-entrypoint-initdb.d中find的具有扩展名.sh,.sql和.sql.gz的文件。 文件将按字母顺序执行。
所以,只需将test.sql
脚本添加到/docker-entrypoint-initdb.d
那么你的Dockerfile必须以命令的forms运行mysqld。
所以,我只会在本地sql
子目录中留下test.sql
,我会使用这个Dockerfile
:
FROM mariadb:latest ADD sql/ /docker-entrypoint-initdb.d ENV MYSQL_ROOT_PASSWORD test123 ENV MYSQL_DATABASE testDB ENV MYSQL_USER toto ENV MYSQL_PASSWORD test123 RUN apt-get update && apt-get -y install vim EXPOSE 3306 CMD ["mysqld"]
然后build立你的形象
docker build -t maria .
并运行容器(可能对映射端口有用)
docker run --name mariadb -ti -d -p 3306:3306 maria
它会创buildtestDB
和用户toto
,正如您在Dockerfiles中使用环境variables所正确定义的那样(提醒您可以在docker run中将它们覆盖为-e
参数)。
你错过了两件事:
- 您必须使用
CREATE DATABASE testDB
命令CREATE DATABASE testDB
。 - 您必须使用
CREATE USER 'toto'
命令CREATE USER 'toto'
。
您必须在运行test.sql
脚本之前执行此操作。 您使用的泊坞窗图像完全是空的 – 它不知道您正在尝试使用的数据库或用户。
如果你执行了上述步骤,仍然permission denied
,那么你还应该包含一个GRANT
语句,它将给出数据库testDB
的必要权限。 检查MariaDB文档以获取详细信息。
- Docker-compose Kubernetes ENV属性的互操作性
- 将自定义水龙头连接到bintray中的现有瓶子上
- 如何用docker 1.13版本更改centos 7中的docker安装目录
- build立jenkinsdocker形象时出现错误
- Docker Security-用户运行进程
- 无法启动elasticsearch docker容器
- 使用预configuration的Docker容器进行Elastic Beanstalk Django部署
- 你如何使用DigitalOcean上的Gitlab Registry的docker-compose?
- 如何通过保存命令创build的docker镜像到远程registry没有docker客户端