mysql - 构建 docker 容器后运行自定义 SQL 查询

标签 mysql docker mariadb dockerfile

我想做的事情:

  • 创建一个运行 ma​​riadb 服务器的容器
  • 构建容器之前运行一些自定义查询。 (不在启动时)

我做了什么:

  1. 我创建了一个docker-compose.yml我在文件中描述了我的服务,对于每个组件,我创建了一个 dockerfile,插入要运行的命令。我得到了显示的错误。
  2. 我又添加了一些 sleep 。一切都没有改变
  3. 我尝试根据数据库创建第二个服务并从那里运行查询。没有任何改变,仍然是同样的错误。

问题出在哪里?

在每个服务构建并运行之前我无法执行任何命令。 在以下 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

参见 https://github.com/docker-library/mariadb/blob/2345e98dc89edae8f11c35ad838887f45859de75/10.4/docker-entrypoint.sh#L314详细信息。

关于mysql - 构建 docker 容器后运行自定义 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59513184/

相关文章:

mysql - 优化 SELECT COUNT(DISTINCT(col)) var, col2 var2 FROM table WHERE col< >'X' and col2 between 'Y' and 'Z' GROUP BY var2 ORDER BY var DESC;为了速度?

mysql - 尝试加入和分组数据

mysql - 为什么docker compose用错误的名称创建mysql容器?

mysql 比较时间戳与彼此的分钟数

docker - 带有 k8s pv : Error opening query log file"file=/prometheus/queries. active err="open/prometheus/queries.active: permission denied"的普罗米修斯

java - 使用 Gradle 和 Docker 部署 Spring Boot/PostgreSQL 项目

c++ - 无法正确连接到 mariadb

mysql - 计算 2 列中某个值的匹配项,分别计数

PHP/MySQL 与日期比较

php - 新手问题: table to form generator in php