2 回答
TA贡献1811条经验 获得超5个赞
需要检查的几件事:
mysql 容器是否表明它已正确启动?
您的 mysql 设置是否太复杂(见下文)?
您是否尝试过使用另一个应用程序(例如 datagrip 或其他一些 mysql 客户端)连接到您的 mysql 实例?
在连接到它之前,您是否确保 mysql 实际上已经完成了它的启动过程?
depends_on
在这里可能无法真正正常工作——其他应用程序在 mysql 启动之前不会启动,但 mysql 不一定会被配置——即你的 test.sql 可能没有实际运行。
您的 mysql 设置似乎有些复杂。有必要吗?我使用了一组类似的技术,我的数据库 docker compose 看起来像这样:
fullstack-mysql:
image: mysql:8.0
ports:
- 3306:3306
volumes:
- database_mysql:/var/lib/mysql
- mysql-log:/var/log/mysql
- mysql-conf:/etc/mysql/conf.d
- ./MySQL/sql-scripts:/docker-entrypoint-initdb.d
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_PASSWORD=docker
- MYSQL_USER=docker
- MYSQL_DATABASE=test_db
- MYSQL_HOST=127.0.0.1
- MYSQL_PORT=3306
- MYSQL_DRIVER=mysql
networks:
- fullstack
假设您不需要做任何复杂的事情,这应该删除大部分 mysql 数据库设置。我做的唯一不同的事情是映射单个启动脚本,而不是整个目录——即
volumes:
./MySQL/sql-scripts/test.sql:/docker-entrypoint-initdb.d/test.sql
虽然我认为您指定的文件夹映射应该可以工作。我刚刚注意到的还有一点:在您的 mysql dockerfile 中,您可以这样做:COPY ./sql-scripts/test.sql /docker-entrypoint-initdb.d/但这对于 docker-compose 文件来说似乎是多余的,它将一个卷放在同一位置。
TA贡献1802条经验 获得超10个赞
入口点上的初始化脚本仅在第一次创建数据库时运行(即当文件夹 /var/lib/mysql 为空时)
删除主机中的 database_mysql 文件夹并让 docker-compose 自动重新创建它。这将导致脚本运行。
请注意,当您删除文件夹时,存储在数据库中的所有数据都将丢失。
- 2 回答
- 0 关注
- 106 浏览
添加回答
举报