2015-10-06 1 views
1

Я хочу, чтобы запустить создание новой базы данных с помощью MySQLдокер Compose YAML - команда

это фрагмент кода у меня в docker-compose.yml файле

mysql: 
    image: mysql 
    container_name: mysql-machine 
    ports: 
    - 3306:3306 
    environment: 
    MYSQL_ALLOW_EMPTY_PASSWORD: true 
    MYSQL_DATABASE: mxdb 
    MYSQL_USER: mxdb 
    MYSQL_PASSWORD: mxdb 
    command: mysqladmin create testing_db 

Теперь, когда я бегу docker-compose up

Я смотрю консоль, и она говорит

mysql_1 | mysqladmin: connect to server at 'localhost' failed 
mysql_1 | error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' 
mysql_1 | Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists! 

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

Я хочу создать несколько баз данных. Таким образом, ручное использование команд - самый простой способ.

+0

Какой образ MySQL вы используете? –

+1

'image: mysql' означает, что это официальный' mysql', с тегом 'last'. https://hub.docker.com/_/mysql/ – haradwaith

ответ

0

Я думаю, вы должны запустить контейнер MySQL и затем иметь другое контейнер импортирует данные. Пример:

.credentials

MYSQL_ALLOW_EMPTY_PASSWORD=true 
MYSQL_USER=mxdb 
MYSQL_PASSWORD=mxdb 
MYSQL_DATABASE=mxdb 

Запуск контейнера:

docker run --name mydb -d --env-file .credentials mysql 

Если вы хотите импортировать данные из файла, создать новый контейнер, ссылку на тот, который уже работает и делают импорт:

docker run --rm -t --link mydb:DB -v /path/to/dump.sql:/dump.sql mysql bash -c "mysql -h DB -u mxdb -pmxdb mxdb < /dump.sql" 

Если вы только что муравей запустить команду, используйте:

docker run --rm -t --link mydb:DB mysql mysql -h DB -u mxdb -pmxdb -e "CREATE DATABASE bar" 

или

docker exec -t mydb mysql -u mxdb -pmxdb -e "CREATE DATABASE bar" 
1

Я не думаю, что вы должны переопределить command для создания базы данных.

В docker-compose команда command должна быть командой для запуска данной службы в изображении докера. В вашем случае эта услуга является сервером MySQL. Если вы укажете command для службы mysql в файле docker_compose.yml, сервер MySQL никогда не запустится.

Что вам нужно сделать, это запустить службу mysql, а затем запустить в ней команды.

mysql: 
    image: mysql 
    container_name: mysql-machine 
    ports: 
    - 3306:3306 
    environment: 
    MYSQL_ALLOW_EMPTY_PASSWORD: true 
    MYSQL_DATABASE: mxdb 
    MYSQL_USER: mxdb 
    MYSQL_PASSWORD: mxdb 

Запустите службу:

docker-compose up 

Подключения к нему:

mysql -umxdb -pmxdb 

Затем создайте базу данных:

create database testing_db; 

Если вам нужно автоматизировать это создание базы данных, вы можете поместить эти команды SQL в файл И делать, когда это необходимо:

cat init_db.sql | mysql -umxdb -pmxdb 
+1

Это работающее решение, но если вы хотите создать много баз данных и использовать масштаб докеры, это будет не удобно. –

0

Если вы используете этот образ MySQL: тутум/MySQL Вы можете добавить имя базы данных, которую вы хотите создать при запуске в качестве переменной среды:

среда:

-ON_CREATE_DB = "newdatabase"


Другим решением является установка сценария оболочки в командную часть. В скрипте вы запускаете mysql, а затем создаете базы данных и добавляете пользователей:

команда: бежать.ш

И на вас сценарий:

/USR/бен/mysqld_safe &

mysqladmin создать testing_db

+0

Этот скрипт не работает. Во-первых, вам придется поместить ваш скрипт в образ Docker с помощью настраиваемого файла Docker. Затем, как только скрипт закончится, сервер MySQL остановится (потому что команда 'завершена"). И, наконец, если база данных уже существует, создание приведет к сбою. – haradwaith

+0

Переменная окружения 'ON_CREATE_DB' на изображении' tatum/mysql' является эквивалентом переменной 'MYSQL_DATABASE' на официальном образ mysql, который OP уже использует. – haradwaith

Смежные вопросы