gpt4 book ai didi

Docker 提交 - 未保存数据库更改

转载 作者:行者123 更新时间:2023-12-02 18:48:28 27 4
gpt4 key购买 nike

我安装了最新的 Docker CS,得到了 LAMP image来自 Docker 集线器。我正在尝试在其中创建一个数据库并使用保存在其中的数据库制作一个新图像。

  1. 启动容器:docker run --name mycontainer fauria/lamp这将启动基于 Ubuntu 的容器并启动 Apache 服务器。 MySQL 服务器也在容器中运行。
  2. 访问容器外壳:docker exec -i -t mycontainer bash
  3. 创建一个数据库并在其上运行一些 MySQL 命令:mysql -u root创建数据库 mydbname;使用我的数据库名;创建函数 ......
  4. 停止容器:docker stop mycontainer
  5. 创建镜像:docker commitdocker ps -l -qmynickname/appname:v1
  6. 移除容器docker container rm mycontainer

现在我预计,如果我基于新图像运行容器,我已经拥有数据库。但它不存在。docker run --name mycontainer --rm -p 80:80 -e LOG_STDOUT=true -e LOG_STDERR=true -e LOG_LEVEL=debug -v/home/username/dev/appname/www:/var/www/html mynickname/appname:v1

我错过了什么?

最佳答案

原因是/var/lib/mysql被列为 VOLUME在 Dockerfile 中。

您所做的更改将保留在 docker stop <yourcontainer> 之间和 docker start <yourcontainer>命令。但是当你提交一个容器时,每个目录都标记为 VOLUME在 Dockerfile 中,被替换为其原始内容。 (即使您没有将外部卷安装到该目录,也会发生这种情况。)参见 docker commit .

您可以通过在 VOLUME 之外的某处进行更改来轻松检查您的其他更改是否保留在提交中。目录。例如,运行 date>/mydate在容器内,然后提交它。然后,当您从该镜像运行新容器时,文件 /mydate仍然会在那里。

如果您想保留数据库更改,您可以通过克隆 repo 然后删除行 VOLUME /var/lib/mysql 来实现。来自 Dockerfile。如果您随后构建新镜像并运行它,它会在您提交容器时保留您的数据库更改。

通常,在生产环境中,您将数据库文件挂载到数据容器或主机上。这样,如果您提交容器,数据库数据将保留在数据容器或主机上。

关于Docker 提交 - 未保存数据库更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52005844/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com