第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Mariadb Docker 容器拒絕使用數(shù)據(jù)庫架構(gòu)進行初始化

Mariadb Docker 容器拒絕使用數(shù)據(jù)庫架構(gòu)進行初始化

PHP
暮色呼如 2021-12-03 19:35:58
我正在使用以下 docker-compose 來初始化一個數(shù)據(jù)庫服務(wù),它將被 Web 服務(wù)使用。<!-- language: YAML -->version: '3'services:  web:    build:       context: .      dockerfile: container-build/web/Dockerfile    ports:      - "8080:80"    volumes:    - /home/johndoe/src/proj:/var/www/public_html    links:    - db  db:    image: mariadb:10.4.7    ports:    - "6603:3306"    restart: always    environment:    - MYSQL_DATABASE=mydb    - MYSQL_ROOT_PASSWORD=12345678    - MYSQL_USER=dbuser    - MYSQL_PASSWORD=12345678    volumes:      - "mysql_data:/var/lib/mysql"      - /home/johndoe/src/proj/data/schema.sql:/docker-entrypoint-initdb.d/schema.sqlvolumes:    mysql_data: { driver: local }然后我按如下方式構(gòu)建和運行容器:docker-compose builddocker-compose up正如您在日志中看到的,數(shù)據(jù)庫 mydb 未初始化,這已通過在容器內(nèi)運行 shell 并嘗試訪問數(shù)據(jù)庫來確認(rèn)。因此,沒有創(chuàng)建 root 用戶,沒有創(chuàng)建數(shù)據(jù)庫,也沒有導(dǎo)入架構(gòu)。有趣的是,環(huán)境變量已經(jīng)被導(dǎo)入到容器中,所以它們在 cotainer 的 shell 中是可用的,例如 echo $MYSQL_USER prints dbuser,這是我們在docker -compose 文件中定義的。另一個表明 docker-compose.yml 沒有做它應(yīng)該做的事情的證據(jù)是當(dāng)我瀏覽http://localhost:8080/test.php 時,它具有以下內(nèi)容:<!-- language: php --><?phpecho "Testing database<br>";try{$db = new PDO('mysql:dbname=mydb;host=db', 'dbuser', '12345678');}catch(PDOException $e){    echo $e->getMessage();    return;} ?>這個頁面顯示: <!-- language: plain --> Testing database SQLSTATE[HY000] [1045] Access denied for user 'dbuser'@'172.19.0.3' (using password: YES)另一方面,在命令行上運行 mariadb 映像并將這些環(huán)境變量和指向 schema.sql 的卷傳遞到命令行工作并初始化數(shù)據(jù)庫。例如,以下命令有效:<!-- language: lang-bash -->docker run --name mariadbtest  --rm -ti -d   -e "MYSQL_ROOT_PASSWORD=12345678" -e "MYSQL_USER=dbuser" -e MYSQL_PASSWORD=12345678  -v /home/johndoe/src/proj/data/schema.sql:/docker-entrypoint-initdb.d/schema.sql  mariadb 那么,我的 docker-compose.yml 有什么問題?Adam Culp的YouTube視頻使用了非常相似的 docker-compose.yaml。
查看完整描述

1 回答

?
Helenr

TA貢獻1780條經(jīng)驗 獲得超4個贊

簡短回答
將映射到 /var/lib/mysql 的數(shù)據(jù)卷重命名,即將 mysql_data 重命名為 db_data 并docker-compose up再次運行。

長答案

我最終想通了這個問題。MariaDB的 docker hub頁面稍微涉及這樣一個事實,即只有在第一次創(chuàng)建容器時,它才會使用 /docker-entrypoint-initdb.d 中可用的數(shù)據(jù)庫模式進行初始化。

當(dāng)容器第一次啟動時,將使用提供的配置變量創(chuàng)建和初始化具有指定名稱的新數(shù)據(jù)庫。此外,它將執(zhí)行在 /docker-entrypoint-initdb.d 中找到的擴展名為 .sh、.sql 和 .sql.gz 的文件。文件將按字母順序執(zhí)行。您可以通過將 SQL 轉(zhuǎn)儲裝載到該目錄中并提供帶有貢獻數(shù)據(jù)的自定義圖像來輕松填充您的 mariadb 服務(wù)。默認(rèn)情況下,SQL 文件將導(dǎo)入由 MYSQL_DATABASE 變量指定的數(shù)據(jù)庫。

這導(dǎo)致我在 docker-compose 中更改 db 服務(wù)名稱并重新運行,這不起作用。我還使用 刪除了所有停止的容器docker container prune,這也無濟于事。

最后,我認(rèn)為我所有的docker-compose ups中一定有一些不變的東西,這與服務(wù)名稱無關(guān)。它是 docker-compose.yml 中的 mysql_data 卷容器。它似乎是一個在您重新部署時不會重新創(chuàng)建的數(shù)據(jù)層,在我的情況下,它在我第一次運行時初始化錯誤,可能是因為我沒有提供環(huán)境變量。因此,我將名稱更改為 db_data 并docker-compose up再次執(zhí)行了中提琴!這次數(shù)據(jù)庫被初始化,我能夠訪問我在初始化時在模式文件中引入容器的數(shù)據(jù)庫表。


查看完整回答
反對 回復(fù) 2021-12-03
  • 1 回答
  • 0 關(guān)注
  • 286 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號