我有一个名为Test
的文件夹,文件夹中的文件如下 -
测试
- test_002.sql
- Dockerfile
- docker-compose.yml
Dockerfile
的内容如下 -
FROM mysql:5.6.40
COPY . /Test
docker-compose.yml
的内容如下 -
version: '3'
services:
test_db:
build: .
image: test_env
container_name: test_env
tty: true
volumes:
- .:/Test
environment:
MYSQL_DATABASE: 'test_db'
MYSQL_ROOT_PASSWORD: 'test_root_pwd'
MYSQL_PASSWORD: 'test_pwd'
MYSQL_USER: 'root'
现在,我将解释我已经完成的一系列步骤 第1步:
docker-compose up --build
这创建了一个新的docker容器,它正在运行中 步骤2:
然后,我进入了泊坞容器docker exec -it <container-ID> bash
第三步:
在docker容器中,我在test_002.sql
文件夹中有mysql转储文件Test
。我将mysql转储加载为mysql -uroot -ptest_root_pwd test_db < Test/test_002.sql
。然后测试数据库将所有表和测试数据加载到表中
step3_check:
检查step3是否将mysql转储测试数据加载到空数据库中(在步骤1中执行docker-compose时创建) -
mysql -uroot -psecret
use test_db;
show tables;
我可以看到test_db
内的所有表,并且每个表中的测试数据来自mysql转储文件(test_002.sql
)。到目前为止一切都很好。
步骤4:
现在我想创建一个新图像,其中包含在test_db中加载的表和测试数据。所以我做了docker container commit <container-ID> <Image:Tag>
。这创建了一个新图像(据说应该包含一个包含所有表和测试数据的test_db
)
第5步:
我将新创建的泊坞窗图像Image:Tag
推送到dockerhub。
步骤6:
在另一台机器上,我拉出了这个泊坞窗图像Image:Tag
并根据新拉出的图像docker run Image:Tag
运行了一个泊坞窗容器。然后创建一个新的docker容器并像在step1
步骤7:在步骤6中新创建的docker容器中,我执行了以下操作 -
mysql -uroot -psecret
use test_db;
show tables;
结果为Empty set (0.00 sec)
。
所有表格和测试数据在哪里?我以为我已加载到test_db并使用docker commit
创建了包含更改的新图像。显然,我推入Docker hub的docker镜像中没有测试数据。
知道为什么会发生这种情况,或者有关如何让test_db加载测试数据并将其冻结为docker图像并将其从任何其他机器中拉出的任何建议
换句话说,如果我从docker hub中提取Image:Tag
,那么从该映像创建的所有容器都应该具有名为&#39; test_db&#39;的mysql数据库。加载所有表格和测试数据。
谢谢,