簡體   English   中英

如何使用 dockerfile 創建 mysql 數據庫和用戶並授予此用戶的權限

[英]How to create mysql database and user and grant permissions of this user with dockerfile

大家好,我嘗試了很多東西,但似乎我無法使用 docker 文件創建數據庫和用戶,您能幫幫我嗎?我正在嘗試以下操作:

運行 sudo yum install mysql-server -y 運行 sudo systemctl enable mysqld 運行 mysql -v -e "創建數據庫測試;"

 ERROR 2002 (HY000): Can't connect to local MySQL server through         
 socket '/var/lib/mysql/mysql.sock' (2)
 ERROR 2002 (HY000): Can't connect to local MySQL server through     
 socket '/var/lib/mysql/mysql.sock' (2)

 The command '/bin/sh -c mysql -v -e "create database test;"' returned 
 a non-zero code: 1 `

這可以通過 dockerfile 實現,而不使用 docker 組合嗎?

謝謝

我強烈建議您使用Docker 集線器mysql圖像,而不是嘗試使用自己的圖像。 您無法創建預加載了數據庫數據或配置的派生映像,但您可以將 SQL 腳本放在/docker-entrypoint-initdb.d中,該腳本將在首次啟動時運行,並且可以使用環境變量完成一些非常基本的配置.

您不必使用 Docker Compose(盡管它對於基本的多容器設置肯定很方便)。 如果沒有 Compose,您可以像這樣一起啟動應用程序和數據庫:

# Create a network so the containers can see each other
docker network create a-network

# Start the database
# (You can also add an option
# -v $PWD/initdb:/docker-entrypoint-initdb.d \
# to run ./initdb/setup.sql and similar scripts)
docker run -d \
  --net a-network \
  --name database \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root-password \
  -e MYSQL_DATABASE=test \
  -e MYSQL_USER=test \
  -e MYSQL_PASSWORD=test \
  mysql:8

# Start the application
docker run -d \
  --net a-network \
  --name myapp \
  -p 8080:8080 \
  -e MYSQL_HOST=database \
  -e MYSQL_DATABASE=test \
  -e MYSQL_USER=test \
  -e MYSQL_PASSWORD=test \
  myapp:20200809

docker-compose.yml文件看起來非常相似,但在 YAML 語法而不是docker run命令中會有這個。)

在問題的 Dockerfile 片段中, sudosystemctl在 Docker 中都不起作用。 (對於sudo ,通常沒有用戶密碼,也沒有機會在 Dockerfile 中輸入密碼; systemctl僅在systemd守護進程正在運行時才有效,而且它幾乎從不在容器中。)每個RUN命令都在干凈的環境,並且運行的進程不會跨RUN命令保留,因此您的RUN mysql...步驟沒有運行它可以附加到的數據庫。

原則上這是可能的 您必須啟動數據庫服務器,然后運行mysql命令,然后徹底停止數據庫,所有這些都在同一個RUN步驟中。 這有點棘手; 配置標准圖像會容易得多。

暫無
暫無

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

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