Docker commit 实际上并没有提交
Docker commit does not actually commit
(我是 docker 的新手,请耐心等待)
注意:我不使用卷,所以 中的答案不适用
- 我正在使用最后列出的 docker-compose 文件从两个 docker 图像(jomla+apache+php 和 mysql)创建两个容器。一切正常。
- 我可以连接到 Joomla 安装页面 我完成了初始配置,连接到数据库,一切都很好。 (我现在可以浏览到主页和管理页面)。甚至安装文件夹也被删除了(joomla 中的强制步骤)。我可以在容器中看到新文件和新数据库 created/modified。
- 我现在将两个 运行 容器提交到两个新图像: docker 提交 CONTAINER_ID new_image_name
- 新图片创建的很好
- 我用 docker-compose down
删除容器
- 我修改 docker-compose.yml 文件以分别为 joomla 和 mysql
使用新提交的图像
- 我发布docker-compose up -d
- 挫败感来了:当我浏览页面时,我回到了 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
正如 David Maze 指出的那样,我构建的原始图像已经在使用卷,因此我的自定义图像“继承”了这些卷——即使我没有在我自己的 yaml 文件中明确声明任何卷。
在我搜索的任何地方都找不到该文档,所以我希望这对其他初学者有所帮助。
(我是 docker 的新手,请耐心等待)
注意:我不使用卷,所以
- 我正在使用最后列出的 docker-compose 文件从两个 docker 图像(jomla+apache+php 和 mysql)创建两个容器。一切正常。
- 我可以连接到 Joomla 安装页面 我完成了初始配置,连接到数据库,一切都很好。 (我现在可以浏览到主页和管理页面)。甚至安装文件夹也被删除了(joomla 中的强制步骤)。我可以在容器中看到新文件和新数据库 created/modified。
- 我现在将两个 运行 容器提交到两个新图像: docker 提交 CONTAINER_ID new_image_name
- 新图片创建的很好
- 我用 docker-compose down 删除容器
- 我修改 docker-compose.yml 文件以分别为 joomla 和 mysql 使用新提交的图像
- 我发布docker-compose up -d
- 挫败感来了:当我浏览页面时,我回到了 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
正如 David Maze 指出的那样,我构建的原始图像已经在使用卷,因此我的自定义图像“继承”了这些卷——即使我没有在我自己的 yaml 文件中明确声明任何卷。 在我搜索的任何地方都找不到该文档,所以我希望这对其他初学者有所帮助。