如何创建mysql数据库和用户并使用dockerfile授予该用户权限

时间:2020-08-09 22:45:02

标签: mysql docker dockerfile

您好,我已经尝试了很多东西,但是看来我无法使用docker文件创建数据库和用户,请您帮我,我正在尝试以下操作:

运行sudo yum install mysql-server -y 运行sudo systemctl启用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 `

可以在不使用docker compose的情况下使用dockerfile实现此功能吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我强烈建议您使用Docker Hub mysql image而不是尝试自己动手。您无法创建预加载了数据库数据或配置的派生图像,但是可以将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步骤中进行。这有点棘手;配置标准映像会容易得多。