【发布时间】:2021-04-05 11:37:49
【问题描述】:
(我是 docker 新手,请耐心等待) 注意:我不使用卷,所以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
【问题讨论】:
-
Docker Hub
joomla和mysql镜像都在各自的 Dockerfile 中声明了一个VOLUME,因此即使您没有声明,数据也始终在一个卷中。你不能在这里使用docker commit。使用docker commit通常不是一个好主意。它会导致您无法复制其构建的图像,并且当您绝对需要安全修复时,您无法升级底层软件。 -
谢谢大卫迷宫 - 就是这样!
标签: mysql docker docker-compose joomla commit