【问题标题】:File in docker-entrypoint-initdb.d never get executed when using docker compose使用 docker compose 时,docker-entrypoint-initdb.d 中的文件永远不会被执行
【发布时间】:2017-10-03 02:29:28
【问题描述】:

我在 Windows 10 上使用 Docker 工具箱

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

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

我不太了解数据文件夹映射,以及如何使文件夹与容器同步,我在使用 docker-compose up -d 重新创建容器时总是收到警告

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

问题

  1. 如何获取/docker-entrypoint-initdb.d中的sql文件被执行?
  2. 使用 mariadb 容器映射数据文件夹的正确方法是什么?

请指导 谢谢

这是我的docker-compose.yml

version: "3.2"
services:
    php:
        image: php:7.1-apache
        container_name: web
        restart: always
        volumes:
            - /.../php:/var/www/html
        ports:
            - "8000:80"
    mariadb:
        image: mariadb:latest
        container_name: db
        restart: always
        environment:
            - MYSQL_ROOT_PASSWORD=12345
        volumes:
            - /.../mariadb/initdb:/docker-entrypoint-initdb.d
            - /.../mariadb/data:/var/lib/mysql
        ports:
            - "3306:3306"

【问题讨论】:

    标签: docker docker-compose docker-machine


    【解决方案1】:

    对我来说,问题在于 Docker 没有清理我之前运行的挂载卷。

    做一个:

    docker volume ls
    

    将列出所有卷,如果以前存在,则在卷上运行“rm”命令将其删除。

    正如 docker mysql docks 中所述,“/docker-entrypoint-initdb.d”文件夹中的脚本仅在容器第一次运行时进行评估,如果之前的卷仍然存在,它将不会运行脚本.

    至于映射,您只需将脚本文件夹挂载到镜像中的“/docker-entrypoint-initdb.d”文件夹即可:

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      注意:Windows 容器不会在 docker-entrypoint-initdb.d/ 中执行任何操作

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-06-12
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-01-16
        • 1970-01-01
        相关资源
        最近更新 更多