![](/img/trans.png)
[英]docker permission denied for shell script in mysql image placed at docker-entrypoint-initdb.d
[英]Why isn't my docker-entrypoint-initdb.d script (as specified in docker-compose.yml) executed to initialize a fresh MySQL instance?
我從這個答案中發現了/docker-entrypoint-initdb.d
目錄,還閱讀了“如何使用這個圖像”MySQL 文檔的“初始化一個新實例”部分。 但是當我在包含下面docker-compose.yml
文件的目錄中運行docker-compose up
時,我的數據庫沒有初始化。
services:
# Use root/root as MySQL user/password credentials
db:
image: mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_USER: root
MYSQL_PASSWORD: root
MYSQL_DATABASE: db
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/init:/docker-entrypoint-initdb.d/:ro
adminer:
image: adminer
restart: always
ports:
- 8080:8080
我確認./mysql/init
目錄包含一個名為init.sql
的文件。 我確認在我清空./mysql/data
目錄並運行./mysql/data
docker-compose up
,創建了一個db
數據庫。 但是沒有填充數據庫,除非我在 Adminer 中手動執行腳本。 (我單擊“導入”,然后選擇文件並按“執行”按鈕。)
我在運行init.sql
docker-compose up
后在控制台輸出中查找消息,這些消息表明嘗試運行init.sql
並且找不到任何東西。
更新: MySQL 版本為 8.0.19。
魔鬼藏在細節里……
您的環境變量中有root
的雙重定義。 root
用戶默認使用來自MYSQL_ROOT_PASSWORD
密碼創建。 然后您要求創建第二個“普通”用戶......使用完全相同的名稱和密碼(即使用MYSQL_USER
和MYSQL_PASSWORD
)
如果你仔細查看你的啟動日志,你會看到一個錯誤
db_1 | ERROR 1396 (HY000) at line 1: Operation CREATE USER failed for 'root'@'%'
這實際上會停止進一步處理docker-entrypoint-initdb.d
中的 init 文件,並繼續進行其余的映像啟動過程(即在臨時服務器上初始化后重新啟動 mysql)。
只需將MYSQL_USER
和MYSQL_PASSWORD
放在您的環境變量中,或者設置一個不同於root
用戶,您將立即看到您的 init 文件已處理(不要忘記再次清空您的數據目錄)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.