sql - 如何在 Docker 容器中填充 mariaDB?
问题描述
我想在 Docker 容器内向我的 MariaDB 数据库添加一个表。
考虑文件tree
$ tree
├── Dockerfile
└── sql
└── test.sql
与Dockerfile
FROM mariadb:latest
COPY sql/test.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"]
和 sql 文件
$ cat sql/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');
我build --tag=mariadbtest .
用来构建图像并运行它
docker run --name mariadb -ti -d -p 3307:3306 mariatest
当我登录时
mysql --host=0.0.0.0 --port=3307 mysql -u root -p
我找不到表格测试。如何将表添加到数据库中?
解决方案
我已经测试了您的案例,到目前为止,我能够使用.sql
文件填充 MariaDB:
除了为了更快地测试它而进行的微小更改之外,请注意,当您运行容器时,您绑定了不正确的端口,在您输入的问题中-p 3307:3306
,它必须是-p 3306:3306
文件树:
├── Dockerfile
└── test.sql
Dockerfile:
FROM mariadb:latest
COPY test.sql /docker-entrypoint-initdb.d/
ENV MYSQL_ROOT_PASSWORD admin
ENV MYSQL_DATABASE test
ENV MYSQL_USER admin
ENV MYSQL_PASSWORD admin
EXPOSE 3306
测试.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 build -t "mariadb" .
运行容器:
docker run --name mariadb -d -p 3306:3306 mariadb
在我的情况下,分配的 docker ip 是172.17.0.2
,所以我连接到数据库:
mysql -h 172.17.0.2 -P 3306 --protocol=TCP --user=admin --password=admin
然后告诉 MySQL 使用哪个数据库:
mysql> USE test
Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A
Database changed
检查“测试”表是否存在:
mysql> show tables like "test";
+-----------------------+
| Tables_in_test (test) |
+-----------------------+
| test |
+-----------------------+
1 row in set (0.00 sec)
并从表中选择所有内容:
mysql> SELECT * FROM test;
+----+------+
| id | name |
+----+------+
| 1 | Toto |
| 2 | Jack |
| 3 | Titi |
+----+------+
3 rows in set (0.01 sec)
推荐阅读
- python - 使用多个字典编辑 .json
- python - 将两个列表转换为动态嵌套字典,然后转换为 JSON
- common-lisp - 如何返回对递归 lisp 函数中的列表所做的更改?
- node.js - 从模块返回流到快速路由
- swift - 离开增强现实视图后删除 _SCNSnapshotWindow
- php - URL 不显示错误/PHP
- python - 使用 python 的 bash 浮动数学
- r - 根据用户输入以闪亮的形式显示输出表并重置为默认表
- reactjs - 在反应静态 Firebase 托管应用程序中隐藏/屏蔽 API 密钥或敏感数据
- azure - Azure 应用服务是否支持扩展 ACL?