【问题标题】:Running custom SQL query after docker container is built构建 docker 容器后运行自定义 SQL 查询
【发布时间】:2019-12-28 17:20:32
【问题描述】:

我想做什么:

  • 创建一个运行 ma​​riadb 服务器的容器
  • 在容器构建之前运行一些自定义查询。 (一开始没有

我做了什么:

  1. 我创建了一个docker-compose.yml 文件,在其中描述了我的服务,对于每个组件,我创建了一个 dockerfile 插入要运行的命令。我得到了显示的错误。
  2. 我添加了一些睡眠秒数。没有任何改变
  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"

【问题讨论】:

  • You can't create a mysql derived image with prepopulated data;标准模式是将您的 SQL 脚本放在/docker-entrypoint-initdb.d 中,并让它们在第一次启动时运行。您是否有特定原因试图避免这种模式?
  • @DavidMaze 谢谢,我不知道这种模式。我现在尝试使用它,但它似乎不适用于 mariadb,因为此图像没有文件:/entrypoint.sh。你有什么建议吗?
  • 我不确定该特定文件是什么,或者您为什么需要引用它。 the mariadb Docker Hub image page 中有一段关于模式的简短段落(在“初始化新实例”下)。

标签: mysql docker mariadb dockerfile


【解决方案1】:

请参阅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

【讨论】:

    猜你喜欢
    • 2021-12-13
    • 1970-01-01
    • 2019-10-09
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 2020-08-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多