簡體   English   中英

docker-compose mysql init sql 未執行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM