Mysql 构建docker容器后运行自定义SQL查询 我想做的是: 创建一个运行mariadb服务器的容器 在生成容器之前运行一些自定义查询。(不是在启动时) 我所做的: 我创建了一个docker compose.yml文件,其中描述了我的服务,并为每个组件创建了一个dockerfile,插入要运行的命令。我得到了显示的错误 我增加了一些睡眠时间。没什么变化 我尝试根据数据库创建第二个服务,并从那里运行查询。没有任何改变,仍然是相同的错误 问题在哪里?
在构建并运行每个服务之前,我无法执行任何命令。 在以下dockerfile中:Mysql 构建docker容器后运行自定义SQL查询 我想做的是: 创建一个运行mariadb服务器的容器 在生成容器之前运行一些自定义查询。(不是在启动时) 我所做的: 我创建了一个docker compose.yml文件,其中描述了我的服务,并为每个组件创建了一个dockerfile,插入要运行的命令。我得到了显示的错误 我增加了一些睡眠时间。没什么变化 我尝试根据数据库创建第二个服务,并从那里运行查询。没有任何改变,仍然是相同的错误 问题在哪里?,mysql,docker,mariadb,dockerfile,Mysql,Docker,Mariadb,Dockerfile,在构建并运行每个服务之前,我无法执行任何命令。 在以下dockerfile中: FROM mariadb:latest ARG MYSQL_ROOT_PASSWORD RUN mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "CREATE DATABASE test" 我得到以下错误: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/r
FROM mariadb:latest
ARG MYSQL_ROOT_PASSWORD
RUN mysql -uroot -p${MYSQL_ROOT_PASSWORD} -e "CREATE DATABASE test"
我得到以下错误:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
以下是docker compose.yml
文件:
version: '3.1'
services:
db:
image: mariadb:latest
build:
context: ./db
args:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
container_name: IUB_sql
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "${MYSQL_ROOT_PASSWORD}"
MYSQL_DATABASE: "useless_test_db"
MYSQL_USER: "${MYSQL_USER}"
MYSQL_PASSWORD: "${MYSQL_PASSWORD}"
ports:
- ${MYSQL_PORT}:3306
注:
我不想只创建数据库,我想运行一些任意查询
注2:
如果我删除runmysql…
行,服务就会启动。然后,如果尝试运行以下命令,则可以成功运行查询:
docker exec-umysql-it IUB\u sql mysql-uroot-p-e“创建数据库测试\u cmdline”
请参阅中的“初始化新实例”。
您可以添加包含SQL文件的文件夹,这些SQL文件将只运行一次。
这可以通过docker compose添加此配置来完成:
volumes:
- /your-directory-with-sql-files:/docker-entrypoint-initdb.d
有关详细信息,请参阅。请参阅中的“初始化新实例”。
您可以添加包含SQL文件的文件夹,这些SQL文件将只运行一次。
这可以通过docker compose添加此配置来完成:
volumes:
- /your-directory-with-sql-files:/docker-entrypoint-initdb.d
有关详细信息,请参阅。;标准模式是将SQL脚本放入
/docker entrypoint initdb.d
中,并让它们在第一次启动时运行。你试图避免这种模式有什么特别的原因吗?@DavidMaze谢谢你,我不知道这种模式。我现在尝试使用它,但它似乎不适用于mariadb,因为此图像没有文件:/entrypoint.sh
。你有什么建议吗?我不知道具体的文件是什么,或者你为什么需要引用它。(在“初始化新实例”下)中有一个关于模式的简短段落。;标准模式是将SQL脚本放入/docker entrypoint initdb.d
中,并让它们在第一次启动时运行。你试图避免这种模式有什么特别的原因吗?@DavidMaze谢谢你,我不知道这种模式。我现在尝试使用它,但它似乎不适用于mariadb,因为此图像没有文件:/entrypoint.sh
。你有什么建议吗?我不知道具体的文件是什么,或者你为什么需要引用它。(在“初始化新实例”下)有一个关于模式的简短段落。您的解决方案对我不起作用。您的解决方案对我不起作用。