Docker compose 不执行 .sql
Posted
技术标签:
【中文标题】Docker compose 不执行 .sql【英文标题】:Docker compose does not execute .sql 【发布时间】:2019-09-15 13:33:20 【问题描述】:尝试为我的应用程序使用 docker compose,因此使用官方 mysql 映像和我自己的 Dockerfile 来创建我的应用程序映像。我想我的initdb.sql
在 docker compose up 期间没有执行。
运行如下:
docker-compose up --build
但是我看不到initdb.sql
被执行了。
我的 docker compose 看起来像这样:
version: "3"
services:
db:
image: mysql:5.7
restart: always
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: "MYDB"
MYSQL_USER: "myuser"
MYSQL_PASSWORD: "mypassword"
MYSQL_ROOT_PASSWORD: "mypassword"
ports:
- "3306:3306"
expose:
- "3306"
volumes:
- my-db:/var/lib/mysql
- ./sqlinit:/docker-entrypoint-initdb.d/initdb.sql
networks:
vpcbr:
ipv4_address: 10.5.0.6
app:
restart: always
build: .
ports:
- 5000:5000
volumes:
- .:/app
depends_on:
- db
networks:
vpcbr:
ipv4_address: 10.5.0.5
volumes:
my-db:
networks:
vpcbr:
driver: bridge
ipam:
config:
- subnet: 10.5.0.0/16
# gateway: 10.5.0.1
如你所见,我在这个目录./sqlinit
中有我的initdb.sql
,在我登录到 mysql 容器后,我可以在/docker-entrypoint-initdb.d/initdb.sql
中看到这个文件
但看起来没有执行,因为当我登录我的应用程序时,我可以看到:
pymysql.err.OperationalError: (1044, "Access denied for user 'myuser'@'%' to database 'MYDB'")
在容器mysql上
2019-09-15T13:17:59.361447Z 2 [注意] 用户 'myuser'@'%' 拒绝访问数据库 'MYDB
我当然做错了,我在这里发现了一些类似的问题,但我仍然没有解决我的问题
【问题讨论】:
【参考方案1】:问题应该出在您映射卷的方式上。您应该将源文件映射到目标文件,而不是将源文件夹映射到文件中,如下所示:
- ./sqlinit/initdb.sql:/docker-entrypoint-initdb.d/initdb.sql
【讨论】:
嗨@picadoh,感谢您的评论。我认为这不是问题,因为脚本位于容器 /docker-entrypoint-initdb.d/initdb.sql 上,而且我认为不需要在 ./sqlinit 中指定任何文件。我可以有更多的 *.sql 并且应该执行所有的。无论如何,我确实尝试了您的解决方案和同样的问题:( 你为 mysql 容器运行了docker-compose logs
吗?只是为了确保它在启动时没有记录任何错误。
同样值得以 root 用户登录到 mysql,以确保创建内容。这可能只是不向该用户授予正确权限的问题。或者手动运行该脚本以了解脚本本身是否存在问题。
嗨@picadoh,我想我知道出了什么问题:(因为我多次使用创建卷-我猜。现在删除卷my-db
并运行docker-compose up --build而且我看不到相同的错误,我可以看到其他类似的表没有创建,但这是另一个问题。创建了数据库并执行了其他内容,因此执行了脚本。所以在我的情况下,每次更改某些内容时我都应该删除卷docker-compose.yml - 谢谢
对不起,我设置得太早了,但看起来我可以看到这个错误 db_1 | /usr/local/bin/docker-entrypoint.sh:运行 /docker-entrypoint-initdb.d/initdb.sql db_1 | mysql: [警告] 在命令行界面上使用密码可能不安全。 db_1 |错误:无法初始化 batch_readline - 可能是输入源是目录或块设备。以上是关于Docker compose 不执行 .sql的主要内容,如果未能解决你的问题,请参考以下文章
docker-compose mysql init sql 未执行
docker-compose部署nacos单机版(简洁优化版)