首页 > 解决方案 > 如何在 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

我找不到表格测试。如何将表添加到数据库中?

标签: sqldockermariadb

解决方案


我已经测试了您的案例,到目前为止,我能够使用.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)

推荐阅读