gpt4 book ai didi

docker - 使用 docker compose 时,docker-entrypoint-initdb.d 中的文件永远不会被执行

转载 作者:行者123 更新时间:2023-12-02 01:10:50 27 4
gpt4 key购买 nike

我在 Windows 10 上使用 Docker Toolbox

我可以通过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 重新创建容器时我总是收到警告

警告:服务“mariadb”正在使用先前容器中的卷“/var/lib/mysql”。主机映射“/.../mariadb/data”无效。删除现有容器(使用 docker-compose rm mariadb)以使用重新创建数据库...完成

问题

  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 volume ls

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

如 docker mysql docks 上所述,“/docker-entrypoint-initdb.d”文件夹中的脚本仅在容器第一次运行时评估,如果仍有先前的卷,则不会运行脚本。

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

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

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

关于docker - 使用 docker compose 时,docker-entrypoint-initdb.d 中的文件永远不会被执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46536361/

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