首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Docker容器中填充mariaDB?

如何在Docker容器中填充mariaDB?
EN

Stack Overflow用户
提问于 2018-08-29 17:58:32
回答 2查看 1.3K关注 0票数 3

我想在Docker容器内的MariaDB数据库中添加一个表。

考虑文件tree

代码语言:javascript
复制
$ tree
├── Dockerfile
└── sql
    └── test.sql

使用Dockerfile

代码语言:javascript
复制
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文件

代码语言:javascript
复制
$ 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 .来构建映像,并使用

代码语言:javascript
复制
docker run --name mariadb -ti -d -p 3307:3306 mariatest

当我登录时

代码语言:javascript
复制
mysql --host=0.0.0.0 --port=3307 mysql -u root -p

我找不到测试台了。如何向数据库添加表?

EN

回答 2

Stack Overflow用户

发布于 2019-10-30 00:44:11

我已经测试了您的用例,到目前为止,我能够用.sql文件填充MariaDB:

除了为了更快地测试它而做的一些小改动之外,请注意,当您运行容器时,您绑定了错误的端口,在您的问题中,您输入了-p 3307:3306,而它必须是-p 3306:3306

文件树:

代码语言:javascript
复制
├── Dockerfile
└── test.sql

Dockerfile:

代码语言:javascript
复制
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

test.sql:

代码语言:javascript
复制
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');

构建镜像:

代码语言:javascript
复制
docker build -t "mariadb" .

运行容器:

代码语言:javascript
复制
docker run --name mariadb -d -p 3306:3306 mariadb

在我的例子中,分配的docker ip是172.17.0.2,因此我连接到DB:

代码语言:javascript
复制
mysql -h 172.17.0.2 -P 3306 --protocol=TCP --user=admin --password=admin

然后告诉MySQL要使用哪个数据库:

代码语言:javascript
复制
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

检查'test‘表是否存在:

代码语言:javascript
复制
mysql> show tables like "test";
+-----------------------+
| Tables_in_test (test) |
+-----------------------+
| test                  |
+-----------------------+
1 row in set (0.00 sec)

并从表中选择所有内容:

代码语言:javascript
复制
mysql> SELECT * FROM test;
+----+------+
| id | name |
+----+------+
|  1 | Toto |
|  2 | Jack |
|  3 | Titi |
+----+------+
3 rows in set (0.01 sec)
票数 2
EN

Stack Overflow用户

发布于 2018-09-30 07:59:12

不是让Docker初始化,而是在第一次连接后执行以下操作:

代码语言:javascript
复制
CREATE DATABASE testDB;   -- (or was it mariadbtest??)
USE testDB;               -- (same as above)
CREATE TABLE ...
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52074643

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档