问题描述
(我是 docker 新手,请耐心等待) 注意:我不使用 VOLUMES,因此 this question 中的答案不适用
- 我正在使用最后列出的 docker-compose 文件从两个 docker 镜像(jomla+apache+PHP 和 MysqL)创建两个容器。一切正常。
- 我可以连接到 Joomla 安装页面我通过初始配置,连接到数据库,一切又好了。 (我现在可以浏览主页和管理页面)。甚至安装文件夹也被删除了(joomla 中的强制步骤)。我可以看到在容器内创建/修改的新文件和新数据库很好。
- 我现在将两个正在运行的容器提交到两个新镜像:docker commit 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 文件中明确声明任何卷。 在我搜索的任何地方都找不到记录,所以我希望这能帮助其他初学者。