使用docker compose

时间:2017-10-03 02:29:29

标签: docker docker-compose docker-machine

我在Windows 10上使用Docker Toolbox

我可以通过http://192.168.99.100:8000成功访问php部分,我一直在使用mariadb部分,但仍有几个问题

我有一个sql文件为/mariadb/initdb/abc.sql所以我应该被复制到/docker-entrypoint-initdb.d,在创建容器后我使用docker-compose exec mariadb访问容器,文件为{{ 1}}但文件永远不会被执行,我也测试过手动将sql文件导入容器,这是成功的,所以sql文件是有效的

我不太了解数据文件夹映射,以及如何让文件夹与容器同步,我总是在使用/docker-entrypoint-initdb.d/abc.sql

重新创建容器时收到警告

docker-compose up -d

问题

  1. 如何让WARNING: Service "mariadb" is using volume "/var/lib/mysql" from the previous container. Host mapping "/.../mariadb/data" has no effect. Remove the existing containers (with docker-compose rm mariadb) to use the Recreating db ... done中的sql文件执行?
  2. 使用mariadb容器映射数据文件夹的正确方法是什么?
  3. 请指导 感谢

    这是我的/docker-entrypoint-initdb.d

    docker-compose.yml

2 个答案:

答案 0 :(得分:1)

在用于创建mariaDB的Docker文件中,最后将abc.sql文件添加到您的Docker入口点,如下所示:

COPY abc.sql /docker-entrypoint-initdb.d/

删除-/.../mariadb/initdb:/docker-entrypoint-initdb.d映射,因为将复制复制到入口点的任何文件。

注意:Windows容器在docker-entrypoint-initdb.d /

中不执行任何操作

答案 1 :(得分:0)

对我来说,问题是Docker没有清理以前运行中的挂载卷。

做一个:

docker volume ls

将列出任何卷,如果以前存在,则运行' rm'在卷上命令将其删除。

如docker mysql docks所述,' /docker-entrypoint-initdb.d'中的脚本;文件夹仅在容器第一次运行时进行评估,如果前一个卷仍然存在,则不会运行脚本。

对于映射,您只需将脚本文件夹挂载到' /docker-entrypoint-initdb.d'图片中的文件夹:

volumes:
   - ./db/:/docker-entrypoint-initdb.d

我在一个名为db的文件夹中有一个脚本文件,相对于我的docker-compose文件。