Как выполнить запрос, используя скрипт в образе MySQL Docker?

0

Я пытаюсь дать пользователю web интерфейс, в котором пользователь может написать query а затем я буду выполнять этот query на своем server.

Я использую следующее изображение docker MySQL с latest tag т.е. mysql:latest

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

Таким образом, я запускаю изображение докера, используя эту команду

 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 '
Теги:
docker

2 ответа

1
Лучший ответ

Сценарий entyrypoint имеет только initdb, если mysqld является аргументом; в вашем случае он видит 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

Создайте папку docker-entrypoint-initdb.d внутри папки conf и все файлы sql внутри этой папки

Дерево выглядит это нравится

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

Вы можете поместить любые файлы .sh или.sql, и они будут запущены/импортированы до того, как служба mysql будет доступна за пределами контейнера.

  • 0
    Я думаю, что вы не получили мой вопрос, я спрашиваю, как я могу запустить эту службу "mysqld" самостоятельно, используя скрипт
  • 0
    Я хотел бы поделиться с вами своим сценарием, чтобы вы могли иметь представление: #!/bin/bash set -e exec 1> $"/usercode/logfile.txt" exec 2> $"/usercode/errors" /etc/init.d/mysqld start # These output and error files are in mounted folder which i check after running script #here i want to run that query and then get out of conatiner
Показать ещё 1 комментарий
0

Попробуйте запустить "/etc/init.d/mysqld start" внутри контейнера docker mysql./root/server - это путь к хост-машине. Mysql был установлен в контейнере не на главной машине. Запустите "/etc/init.d/mysqld start" не на главной машине.

  • 0
    но команда "/etc/init.d/mysqld start" находится в файле сценария, который монтируется в докере с помощью "-v / root / ServerCode /: / usercode", поэтому она будет запускать эту команду в самом докере. Пожалуйста, поправьте меня, если я ошибаюсь.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню