2015-10-06 160 views
1

我想用mysql搬運工撰寫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! 

那麼我該如何重新迭代命令部分,所以我得到的服務正常工作?

我想創建多個數據庫。所以手動使用命令是最簡單的方法。

+0

MySQL的哪些圖像是您使用? –

+1

'image:mysql'表示它是官方的'mysql',標籤爲'latest'。 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" 

如果你只是w螞蟻運行一個命令,使用:

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應該是在Docker鏡像中啓動給定服務的命令。在你的情況下,該服務是一個MySQL服務器。如果您在docker_compose.yml中爲mysql服務提供了command,那麼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

這是可行的解決方案,但是如果您想創建多個數據庫並使用docker-compose scale,它將不方便。 –

0

如果你使用MySQL這個形象:tutum/MySQL的 您可以添加要在啓動時創建成一個環境變量的數據庫名稱:

環境:

-ON_CREATE_DB = 「newdatabase」


另一個解決方案是在命令部分放置一個shell腳本。在腳本中啓動mysql,然後創建數據庫並添加用戶:

command:run。SH

而且你的腳本:

在/ usr /斌/ mysqld_safe的&

中mysqladmin創建testing_db

+0

此腳本不起作用。首先,您必須將自己的腳本放在Docker鏡像中,並使用自定義的Dockerfile。然後,只要腳本結束,MySQL服務器就會停止(因爲'command'完成了)。最後,如果數據庫已經存在,創建將會崩潰。 – haradwaith

+0

'tatum/mysql'映像上的'ON_CREATE_DB'環境變量等同於正在使用的官方mysql映像中的'MYSQL_DATABASE'變量。 – haradwaith