我正在尝试为用户提供一个web
界面,用户可以在其中编写query
,然后我将在query
上执行server
。
我使用以下MySQL
docker
图片与latest tag
即mysql: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 `
答案 0 :(得分:2)
如果 mysqld 是参数,则entyrypoint 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服务之前运行/导入它们。
答案 1 :(得分:0)
尝试运行" /etc/init.d/mysqld start"在mysql docker容器里面。 / root / server是主机计算机路径。 Mysql已经安装在不在主机上的容器中。请运行" /etc/init.d/mysqld start"不在主机上。