2

我有这个应用程序尝试使用 docker + fig 进行编排,这对于第一天的尝试非常有用。它使用一个数据容器,我想在其中保存我的数据库文件和应用程序使用的 redis + mysql 容器。

启动后,mysql 容器会在内部/var/lib/mysql查找数据文件,如果没有找到,它会创建默认的 sb,然后我可以填充该文件,并创建文件并将其保存在我的数据卷中。

当我学习无花果时,我必须做一个fig rm --force mysql删除我的 mysql 容器的操作。我这样做并不担心知道我的数据在数据容器上是安全的。在我的主机上运行 als显示 mysql 文件仍然完好无损。

当我再次运行fig up它再次创建 mysql 容器时会出现问题。即使我共享了相同的卷并且我的旧 mysql 文件仍然存在,这个新容器也会创建一个新数据库,就好像共享的卷是空的一样。这仅在我rm使用容器时发生,而不是在我关闭 fig 并将其重新启动时发生。

如果有帮助,这是我的无花果文件:

data: image: ubuntu:12.04 volumes: - /data/mysql:/var/lib/mysql redis: image: redis:latest mysql: image: mysql:latest ports: - 3306 environment: MYSQL_DATABASE: ***** MYSQL_ROOT_PASSWORD: ***** volumes_from: - data web: build: . dns: 8.8.8.8 command: python manage.py runserver 0.0.0.0:8000 environment: - DEBUG=True - PYTHONUNBUFFERED=1 volumes: - .:/code ports: - "8000:8000" links: - data - mysql - redis

任何想法为什么新的 mysql 容器不会使用现有文件。?

4

2 回答 2

0

这似乎是一个错误,请参阅此相关问题,其中包含相关 fig/docker 问题的链接:https ://stackoverflow.com/a/27562669/204706

显然,docker 1.4.1 改善了这种情况,因此如果您还没有使用该版本,则应该尝试使用该版本。

于 2015-01-06T13:40:01.250 回答
0

我没有使用过fig,但会研究它,因为您帖子中的简单语法看起来非常棒。每天我都会多花几个小时来扩展我对 Docker 的了解,并重新思考什么是可能的。大约 3 周以来,我一直在为我的 MySQL 实例运行一个无状态数据容器。这一直运行良好,没有任何问题。

如果容器启动时里面 /var/lib/mysql的内容不存在,那么脚本会安装所需的数据库文件。该脚本检查初始数据库文件是否存在,而不仅仅是/var/lib/mysql路径。

if [[ ! -f $VOLUME_HOME/ibdata1 ]]; then
    echo "=> An empty or uninitialized MySQL volume is detected in $VOLUME_HOME"
    echo "=> Installing MySQL ..."

else
    echo "=> Using an existing volume of MySQL"
fi

这是我正在继续增强的 MySQL 存储库的直接链接

于 2014-12-24T08:29:07.897 回答