提问者:小点点

Docker commit实际上不提交


(我是docker的新手,请耐心等待)注意:我不使用卷,所以这个问题的答案不适用

  1. 我正在使用末尾列出的docker-compose文件,从两个docker映像(Jomla+Apache+PHP和mysql)创建两个容器。一切正常。
  2. 我可以连接到Joomla安装页面我完成了初始配置,连接到数据库,一切正常。(我现在可以浏览主页和管理页面)。即使是安装文件夹也可以很好地移除(joomla中的强制步骤)。我可以在容器中看到创建/修改的新文件和新数据库。
  3. 我现在将两个正在运行的容器提交给两个新映像:docker commit CONTAINER_ID new_image_name
  4. 新图像创建良好
  5. 我使用docker-compose Down删除容器
  6. 我修改docker-compose.yml文件,以便分别为joomla和MySQL使用新提交的映像
  7. i发布docker-compose up-d
  8. 但令人沮丧的是:当我浏览到该页面时,我又回到了Joomla安装页面,配置文件不见了,数据库为空,安装文件夹又出现了。换句话说,在这两种图像中都没有犯下任何罪行。我甚至删除了较旧的图像,以排除意外使用它们的可能性。

为什么docker没有提交这些更改?

如果我做了手动更改(比如docker cp...或docker exec...或者甚至是在容器内),这些更改会很好地被提交。我花了整整两天的时间在这上面,任何帮助都是感激的。

docker-compose.yml:

version: '3.8'

networks:
  frontend:
  backend:

services:

  mysql_db:
    container_name: mysql
    image: mysql_me:latest
    command: mysqld --innodb-buffer-pool-size=20M
    restart: on-failure
    environment:
      MYSQL_DATABASE: 'joomla'
      MYSQL_USER: 'joomla_user'
      MYSQL_PASSWORD: 'JPassword'
      MYSQL_ROOT_PASSWORD: 'RPassword'
      MYSQL_ROOT_HOST: '%'
    ports:
      - '3306:3306'
    expose:
      - '3306'
    networks:
      - backend

  joomla:
    container_name: joomla
    image: joomla_me:latest
    restart: always
    ports:
      - "443:443"
      - "8080:80"
    environment:
      JOOMLA_DB_HOST: 'mysql_db:3306'
      JOOMLA_DB_USER: 'joomla_user'
      JOOMLA_DB_PASSWORD: 'JPassword'
      JOOMLA_DB_NAME: 'joomla'
    links:
      - mysql_db:3306
    networks:
      - frontend
      - backend
    depends_on:
      - mysql_db

共1个答案

匿名用户

正如David Maze所指出的,我正在构建的原始映像已经在使用卷,所以我的自定义映像“继承”了那些卷--尽管我没有在自己的yaml文件中显式声明任何卷。在我搜索的任何地方都找不到文档,所以我希望这能对其他初学者有所帮助。