【问题标题】:Docker compose volume mount ignores the dataDocker compose 卷挂载忽略数据
【发布时间】:2020-05-29 12:46:04
【问题描述】:

我有一个 docker compose 文件为:

    ...
    restart: always
    ports:
      - "5432:5432"
    environment:
      POSTGRES_PORT: 5432
    volumes:
      - ./tablestruct:/docker-entrypoint-initdb.d/folder1
      - ./tablestruct1:/docker-entrypoint-initdb.d/folder2

volumes:
  folder1:
  folder2:

当我运行 compose up 时,我得到:

postgres_1 | /usr/local/bin/docker-entrypoint.sh:忽略 /docker-entrypoint-initdb.d/folder1 postgres_1 | postgres_1 | /usr/local/bin/docker-entrypoint.sh:忽略/docker-entrypoint-initdb.d/folder2

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    来自 dockerhub postgres 镜像文档:

    如果您想在派生的图像中进行额外的初始化 从此,在下面添加一个或多个 *.sql、*.sql.gz 或 *.sh 脚本 /docker-entrypoint-initdb.d(必要时创建目录)。 入口点调用 initdb 后创建默认 postgres 用户 和数据库,它将运行任何 *.sql 文件,运行任何可执行的 *.sh 脚本,并获取其中找到的任何不可执行的 *.sh 脚本 目录在启动服务之前做进一步的初始化。

    警告:/docker-entrypoint-initdb.d 中的脚本仅在您运行时运行 使用空的数据目录启动容器;任何 容器启动时,预先存在的数据库将保持不变。一 常见问题是,如果您的 /docker-entrypoint-initdb.d 之一 脚本失败(这将导致入口点脚本退出)和 您的协调器使用已经初始化的容器重新启动容器 数据目录,它不会继续你的脚本。

    您应该将所有内容移动到同一目录并将其挂载为/docker-entrypoint-initdb.d/,而不是其中的文件夹。

    所以:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-10
      • 2017-11-05
      • 2017-06-06
      相关资源
      最近更新 更多