首页 > 解决方案 > 如何在 MySQL Docker 映像中使用脚本执行查询?

问题描述

我试图给用户一个web界面,用户可以在其中编写一个query,然后我将query在我的server.

我在ie中使用以下MySQL docker图像latest tagmysql:latest

https://hub.docker.com/_/mysql/

所以我正在使用这个命令运行 docker 镜像

 docker run -it --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -v /root/ServerCode/:/usercode  mysql /bin/bash

我的root/ServerCode目录包含一个script我想用于运行mysql服务器和用户的query.

script的是

#!/bin/bash
set -e
/etc/init.d/mysqld start

它给了我error

bash: /etc/init.d/mysqld: No such file or directory

我也试过用这个

service mysqld start

它也在给予error

mysqld: unrecognized service

编辑:

 #!/bin/bash
set -e  
exec  1> $"/usercode/logfile.txt"
exec  2> $"/usercode/errors"
# These output and error files are in mounted folder which i check after running script
/etc/init.d/mysqld start // run sql server here 
#here i want to run that query and then get out of conatiner `

标签: mysqlbashdocker

解决方案


如果mysqld是参数,则入口点 scipt 仅执行 initdb ;在您的情况下,它会看到bash,因此会跳过 initdb 并使用其参数运行 bash 。

如果您只是在 mysql 运行后尝试运行一些设置脚本,您是否查看过/docker-entrypoint-initdb.d/

创建一个 docker-compose.yml

version: '2'
services:

    db:
      image: mysql
      container_name: mysql
      restart: always
      volumes:
        - /var/db/startuphry/mysql:/var/lib/mysql
        - ./conf/my.cnf:/etc/mysql/conf.d/settings.cnf
        - ./conf/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
      environment:
        - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
        - MYSQL_DATABASE=${MYSQL_DATABASE}
        - MYSQL_USER=${MYSQL_USER}
        - MYSQL_PASSWORD=${MYSQL_PASSWORD}
      ports:
        - "${MYSQL_PORT}:3306"

创建一个conf文件夹,将my.cnf文件添加到其中

[mysqld]
local-infile=0

conf文件夹中创建文件夹docker-entrypoint-initdb.d并在此文件夹中创建所有 sql 文件

树看起来像这样

|____docker-compose.yml
|____conf
      |___my.cnf
      |___docker-entrypoint-initdb.d
                       |___one.sql
                       |___two.sql

您可以将任何.sh文件或 .sql 文件放在那里,它们将在 mysql 服务在容器外可用之前运行/导入。


推荐阅读