2017-02-09 115 views
2

我的docker-compose腳本成功管理運行mysql/mariadb服務,並將包含數據庫模式的我的「init.sql」腳本複製到「/docker-entrypoint-initdb.d」 。但是,sql腳本永遠不會執行,因爲它應該是according to the docsDocker-compose mysql:import .sql

沒有錯誤,沒有在日誌中。我檢查了sql文件被複制到容器中的正確位置。我檢查了腳本在空數據庫上沒有錯誤的情況下運行。

我錯過了什麼?如果腳本被執行(甚至出於某種原因,什麼也不做),它甚至可以在日誌中看到嗎?

編輯:搬運工-撰寫版本:1.8.1,圖像MariaDB的:21年10月1日)

# docker-compose.yml 

version: '2' 
volumes: 
    data-volume: {} 
services: 
    mysql: 
    image: mariadb 
    ports: 
     - "3306:3306" 
    environment: 
     MYSQL_ROOT_PASSWORD: pwd 
     MYSQL_DATABASE: users_db 
    volumes: 
     - data-volume:/var/lib/mysql 
     - ./resources/docker-sql/init.sql:/docker-entrypoint-initdb.d/init.sql 
    backend: 
    image: myapp 
    ports: 
     - "8000:80" 
    depends_on: 
     - mysql 
    links: 
     - mysql 
+1

按照['搬運工-entrypoint.sh'](HTTPS的來源:/ /github.com/docker-library/mariadb/blob/b558f64b736650b94df9a90e68ff9e3bc03d4bdb/10.1/docker-entrypoint.sh)(該腳本應該執行你的'init.sql'),如果它被執行,日誌中應該有行(行154)。你可以添加docker logs的輸出嗎?此外,您的腳本只會在容器第一次啓動時執行(第76行)!你必須在嘗試之間刪除它。 – fzgregor

+0

哦,我不得不刪除容器。謝謝! '碼頭組成停止','碼頭組成'rm','碼頭組成'。 – JulienD

+0

您是否有人寫出正式答案? :) – Martin

回答

4

綜觀docker-entrypoint.sh文件MariaDB的圖像的源,這是應該腳本執行您init.sql,它變得清晰,

  1. 當容器不包含之前(腳本的76行)數據庫中的腳本纔會執行,而
  2. 會有一個日誌輸出,通知您腳本已被調用。

要使用docker-compose做到這一點,你必須停止服務,刪除容器(擺脫數據庫),並再次啓動:

docker-compose stop 
docker-compose rm 
docker-compose start 

這裏是圖像的示例行爲,只能用.sh文件,而不是.sql

$ cat hello.sh 
echo "This is output of the hello script" 
$ docker run -it -v `pwd`/hello.sh:/docker-entrypoint-initdb.d/hello.sh -v mariadb_test:/var/lib/mysql -e MYSQL_RANDOM_ROOT_PASSWORD=1 mariadb 
Initializing database 
2017-02-09 14:13:54 140617005938624 [Note] /usr/sbin/mysqld (mysqld 10.1.21-MariaDB-1~jessie) starting as process 63 ... 
2017-02-09 14:13:54 140617005938624 [Note] InnoDB: Using mutexes to ref count buffer pool pages 
2017-02-09 14:13:54 140617005938624 [Note] InnoDB: The InnoDB memory heap is disabled 
2017-02-09 14:13:54 140617005938624 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 
[...] 
2017-02-09 14:14:03 139836212086528 [Note] InnoDB: Dumping buffer pool(s) not yet started 
2017-02-09 14:14:03 139836971521984 [Note] Plugin 'FEEDBACK' is disabled. 
2017-02-09 14:14:03 139836971521984 [Warning] 'user' entry '[email protected]' ignored in --skip-name-resolve mode. 
2017-02-09 14:14:03 139836971521984 [Warning] 'proxies_priv' entry '@% [email protected]' ignored in --skip-name-resolve mode. 
2017-02-09 14:14:03 139836971521984 [Note] mysqld: ready for connections. 
Version: '10.1.21-MariaDB-1~jessie' socket: '/var/run/mysqld/mysqld.sock' port: 0 mariadb.org binary distribution 
Warning: Unable to load '/usr/share/zoneinfo/leap-seconds.list' as time zone. Skipping it. 
GENERATED ROOT PASSWORD: dau6voh4eej2jooRohpiop4eh6ahl7Uz 
2017-02-09 14:14:05 139836970654464 [Warning] 'proxies_priv' entry '@% [email protected]' ignored in --skip-name-resolve mode. 

/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/hello.sh 
This is output of the hello script 

2017-02-09 14:14:05 139836970351360 [Note] mysqld: Normal shutdown 

2017-02-09 14:14:05 139836970351360 [Note] Event Scheduler: Purging the queue. 0 events 
2017-02-09 14:14:05 139836195301120 [Note] InnoDB: FTS optimize thread exiting. 
2017-02-09 14:14:05 139836970351360 [Note] InnoDB: Starting shutdown... 
2017-02-09 14:14:05 139836970351360 [Note] InnoDB: Waiting for page_cleaner to finish flushing of buffer pool 
2017-02-09 14:14:07 139836970351360 [Note] InnoDB: Shutdown completed; log sequence number 1616829 
2017-02-09 14:14:07 139836970351360 [Note] mysqld: Shutdown complete 


MySQL init process done. Ready for start up. 
[...] 

您在日誌輸出中看到某處的電話,它的標準輸出hello.sh被埋葬。在容器的後續啓動不執行腳本,因爲該數據庫已經創建(在本地MariaDB的體積):

$ docker run -it -v `pwd`/hello.sh:/docker-entrypoint-initdb.d/hello.sh -v mariadb_test:/var/lib/mysql -e MYSQL_RANDOM_ROOT_PASSWORD=1 mariadb 
2017-02-09 14:19:13 140155189532608 [Note] mysqld (mysqld 10.1.21-MariaDB-1~jessie) starting as process 1 ... 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Using mutexes to ref count buffer pool pages 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: The InnoDB memory heap is disabled 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: GCC builtin __atomic_thread_fence() is used for memory barrier 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Compressed tables use zlib 1.2.8 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Using Linux native AIO 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Using SSE crc32 instructions 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Initializing buffer pool, size = 256.0M 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Completed initialization of buffer pool 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Highest supported file format is Barracuda. 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: 128 rollback segment(s) are active. 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Waiting for purge to start 
2017-02-09 14:19:13 140155189532608 [Note] InnoDB: Percona XtraDB (http://www.percona.com) 5.6.34-79.1 started; log sequence number 1616839 
2017-02-09 14:19:13 140154429736704 [Note] InnoDB: Dumping buffer pool(s) not yet started 
2017-02-09 14:19:13 140155189532608 [Note] Plugin 'FEEDBACK' is disabled. 
2017-02-09 14:19:13 140155189532608 [Note] Server socket created on IP: '::'. 
2017-02-09 14:19:13 140155189532608 [Warning] 'proxies_priv' entry '@% [email protected]' ignored in --skip-name-resolve mode. 
2017-02-09 14:19:13 140155189532608 [Note] mysqld: ready for connections. 
Version: '10.1.21-MariaDB-1~jessie' socket: '/var/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution