[英]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 片段中, sudo
和systemctl
在 Docker 中都不起作用。 (對於sudo
,通常沒有用戶密碼,也沒有機會在 Dockerfile 中輸入密碼; systemctl
僅在systemd
守護進程正在運行時才有效,而且它幾乎從不在容器中。)每個RUN
命令都在干凈的環境,並且運行的進程不會跨RUN
命令保留,因此您的RUN mysql...
步驟沒有運行它可以附加到的數據庫。
原則上這是可能的; 您必須啟動數據庫服務器,然后運行mysql
命令,然后徹底停止數據庫,所有這些都在同一個RUN
步驟中。 這有點棘手; 配置標准圖像會容易得多。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.