docker commit不会对新创建的docker镜像应用更改

时间:2018-06-14 21:51:44

标签: mysql docker docker-compose dockerfile docker-container

我有一个名为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数据库。加载所有表格和测试数据。

谢谢,

0 个答案:

没有答案