我想做的事情:
- 创建一个运行 mariadb 服务器的容器
- 在构建容器之前运行一些自定义查询。 (不在启动时)
我做了什么:
- 我创建了一个
docker-compose.yml
我在文件中描述了我的服务,对于每个组件,我创建了一个 dockerfile,插入要运行的命令。我得到了显示的错误。 - 我又添加了一些 sleep 。一切都没有改变
- 我尝试根据数据库创建第二个服务并从那里运行查询。没有任何改变,仍然是同样的错误。
问题出在哪里?
在每个服务构建并运行之前我无法执行任何命令。 在以下 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/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:
如果我删除 RUN mysql ...
线路服务上去了。然后,如果我尝试运行以下命令,我就能够成功运行查询:
docker exec -umysql -it IUB_sql mysql -uroot -p -e "CREATE DATABASE test_cmdline"
最佳答案
请参阅 https://hub.docker.com/_/mariadb 中的“初始化新实例” 。 您可以添加一个包含仅运行一次的 SQL 文件的文件夹。 这可以通过 docker-compose 添加此配置来完成:
volumes:
- /your-directory-with-sql-files:/docker-entrypoint-initdb.d
关于mysql - 构建 docker 容器后运行自定义 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59513184/