簡體   English   中英

為什么 docker compose 創建名稱錯誤的 mysql 容器?

[英]Why is docker compose creating mysql container with wrong name?

我已經設法創建了一個 MySQL 和 PHP 容器,並且我的腳本執行並且我的所有表都在那里。

但是,我有一個名為“myDb”的數據庫和一個名為“someuser”的用戶,當由於某種原因創建數據庫時,數據庫的名稱為“somedatabase”

我的 docker-compose.yaml 文件:

services:
  mysql:
    image: mysql:latest
    ports:
      - 3307:3306
    environment:
      MYSQL_DATABASE: myDb
      MYSQL_ROOT_PASSWORD: SomeRootPassword1!
      MYSQL_USER: someuser
      MYSQL_PASSWORD: Password1!
    volumes:
      - ./dbScript/winit_Script2.sql:/docker-entrypoint-initdb.d/winit_Script2.sql
      - db_data:/var/lib/mysql
  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: dev_pma
    links:
      - mysql
    environment:
      PMA_HOST: mysql
      PMA_PORT: 3307
      PMA_ARBITRARY: 1
    restart: always
    ports:
      - 8183:80

volumes:
  db_data:

php管理員:

在此處輸入圖片說明

mysql工作台:

在此處輸入圖片說明

我在這里做錯了什么?

評論后稍作修改:

看起來,當有一個卷部分時,你在 docker 中創建卷,當你在特定端口上創建一個卷時,每次你執行 docker-compose up 時它都會被重用。 這就是我的情況。

已接受答案中的更多詳細信息。

如果卷不干凈,mysql 映像不會初始化數據庫。

當您從同一個撰寫文件停止和啟動數據庫時,卷始終相同,因此您希望即使在應用程序重新啟動后數據也能保留。

要強制重新初始化數據,您可以刪除該 docker 卷(僅當您不再需要該數據庫時!這是無法撤消的):

首先,停止並刪除容器。

然后列出並刪除持久化數據庫的卷:

docker volume ls
DRIVER              VOLUME NAME
local               <your-deployment-name>_db_data


docker volume rm <your-deployment-name>_db_data

然后再次運行myDb docker-compose up命令,您將能夠在 phpMyAdmin 中找到myDb而不是somedb


編輯:
除非您更改自己的entrypoint並重建映像以強制它根據您傳遞的 ENV 初始化您的數據庫,即使卷不干凈,我想到的唯一選擇是手動創建新數據庫。 這里是跳過DB的重新初始化和條件在這里是音量是否干凈時調用腳本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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