[英]docker-compose mysql init sql is not executed
我正在嘗試設置一個 mysql docker 容器並執行 init sql 腳本。 不幸的是,sql 腳本沒有執行。 我究竟做錯了什么?
version: '3.3'
services:
api:
container_name: 'api'
build: './api'
ports:
- target: 8080
published: 8888
protocol: tcp
mode: host
volumes:
- './api:/go/src/app'
depends_on:
- 'mysql'
mysql:
image: 'mysql:latest'
container_name: 'mysql'
volumes:
- ./db_data:/var/lib/mysql:rw
- ./database/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
restart: always
environment:
MYSQL_USER: test
MYSQL_PASSWORD: test
MYSQL_ROOT_PASSWORD: test
MYSQL_DATABASE: test
ports:
- '3306:3306'
volumes:
db_data:
我用docker-compose up -d --build
執行文件
docker-entrypoint-initdb.d
文件夾只會在容器創建(實例化)時運行一次,因此您實際上必須執行docker-compose down -v
以在下次運行時重新激活它。
如果您希望能夠隨時添加 sql 文件,您可以在此處查看專門的 MySql docker 映像... http://ivo2u.nl/o4
許多容器化應用程序,尤其是有狀態的應用程序,有一種運行init
腳本的方法(如這里的 sql 腳本),並且它們應該只運行一次。
由於它們是有狀態的,卷是容器在容器重啟時是否運行init
腳本的真實來源。
與您的情況一樣,刪除用於綁定安裝的文件夾或使用新命名的卷應該重新運行任何存在的init
腳本。
這些腳本在您創建容器時運行,而不是每次啟動時運行。
您可以docker-compose up --force-recreate mysql
強制這些腳本重新運行。
此外,如果您有這樣的卷./db_data:/var/lib/mysql:rw
,那么您還需要在重新創建容器之前刪除./db_data
。
我不是碼頭專家,但這對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.