mysql - 在 docker 中为 alpine linux 安装 Mysql
问题描述
我在 docker 的 alpine 上安装 mysql 仍然有问题。
我还需要 openjdk:8u201-jdk-alpine3.9。
我的码头文件:
FROM openjdk:8u201-jdk-alpine3.9
RUN apk update && \
apk add mysql mysql-client && \
rm -f /var/cache/apk/* && \
addgroup mysql mysql && \
mkdir run/mysqld && \
touch /var/run/mysqld/mysqld.sock && \
touch /var/run/mysqld/mysqld.pid && \
chown -R mysql:mysql /var/run/mysqld/mysqld.sock && \
chown -R mysql:mysql /var/run/mysqld/mysqld.pid && \
chmod -R 644 /var/run/mysqld/mysqld.sock && \
apk add openrc --no-cache
但是,在容器中: - 没有 mysql 服务(只有 mariadb,但这可能是 alpine 的标准情况) - /etc/mysql 目录中没有任何 my.cnf 文件
当我尝试mysql
命令时,出现错误:
Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (111)
当我尝试mysql -h 127.0.0.1 -P 3306 -u root
命令时,出现错误:
Can't connect to MySQL server on '127.0.0.1' (115)
对于本地主机也是如此。
解决方案
首先 - 为什么要在该特定图像上安装 mysql-server?我建议使用 2 个单独的容器 - 一个用于 mysql 数据库,一个用于您正在使用该 openjdk 映像开发的应用程序。
您可以简单地使用此要点https://gist.github.com/karlisabele/d0bebe3d27fc44a57d1db9a9abdff45a
创建一个设置,您的 Java 应用程序可以使用database
(服务名称)作为 mysql 服务器的主机名连接到 mysql 数据库。
有关mysql 映像的其他配置,请参阅https://hub.docker.com/_/mysql (您应该定义 MYSQL 用户、密码、数据库名称等...)
更新
我更新了要点并添加了 mysql 工作所需的环境变量...用您自己的替换 qwerty 值,您应该能够使用数据库中提供的用户名和密码通过数据库:3306 从 Java 应用程序访问数据库环境变量
文件末尾的卷定义告诉 docker daemon 我们要在主机文件系统的某处创建一个持久卷并mysql
用作别名。因此,当我们定义数据库服务卷时,我们可以简单地使用 mysql:/var/lib/mysql 并且它实际上会挂载 docker 在您的文件系统上创建的一个不起眼的文件夹。这将允许 mysql 数据库在您每次启动服务时都具有持久状态(因为它将从您的主机装载数据)并且您不必担心卷的实际位置
您可以通过运行查看所有卷docker volumes ls
推荐阅读
- mysql - 半同步主主复制
- javascript - 通过键比较两个嵌套对象并获取匹配的对象/数组
- javascript - 如何制作可更新的导航栏?
- java - 如何使用 Google Cloud Storage Java SDK 获取存储桶中最后创建的文件?
- c# - Mediatr IPipelineBehavior 未触发
- php - 查看和编辑 Cloud SQL 表
- mysql - MySQL 每小时一行 00:01:00 和 23:59:00 一天的间隔
- typescript - MaybeSubject:有条件地对内部 observable 应用 shareReplay()
- c# - HttpClient 如何在一个地方捕获每个响应
- python-3.x - 在 Networkx 中创建饼图作为节点