在mysql8中使用docker进行身份验证[重复]

lmvvr0a8  于 2023-10-15  发布在  Mysql
关注(0)|答案(1)|浏览(128)

此问题已在此处有答案

MySQL: How to allow remote connection to mysql(19回答)
23天前关闭
我一直在阅读关于连接到在Docker容器中运行的mysql示例的线程,尝试了所有神奇的解决方案,似乎都不起作用。我有一个工作的PHP应用程序,phpAdmin也工作(都是Docker镜像)。从PHP内部,我可以很好地连接。现在我尝试使用一个vanilla Node.js示例服务器进行连接,但连接一直被拒绝。在我使用tcp-connect之前,它都是一个errno-4078,现在它变成了一个errno 1045(访问被拒绝)。mysql是这样开始的:

docker run --name mysql -d -e MYSQL_ALLOW_EMPTY_PASSWORD=TRUE --expose 3306 -p 3036:3036 mysql

应用程序可以直接使用'node app.js',或者使用Docker(在使用Docker build之后),如下所示

docker run --name app -d --link mysql:db -p 8081:8080 app

我以完全相同的方式启动工作PHP应用程序,没有区别-它可以工作,但Node不行。相同的用户和密码组合让我可以在bash shell中使用mysql CLI手动登录,所以密码是可以的。
Dockerfile就像香草一样,像这样:

FROM node
WORKDIR /usr/src/app
COPY package.json .
COPY package-lock.json .
RUN npm install
COPY . .
EXPOSE 8080
CMD [ "node", "app.js" ]

mysql 8.1.0和Docker 24.0.5
在phpMyAdmin中有两个用户:没有密码的root用户和具有密码和所有权限的另一个用户。我试图从外部连接到Docker容器,所以我暴露了端口3306(似乎可以工作),并且在启动应用程序时,'link'指令似乎可以工作,它显然是“尝试”连接。不会死,只会说“连接被拒绝”。我尝试了环境变量解决方案,我尝试了tcp-connect,我尝试了mysql_native_password,这些解决方案都没有成功。我做错了什么?
ps哦,还有,我能不能走另一条路,而不是试图绕过安全,只是给予它想要的?(我不知道,这是一个证书。一对钥匙什么的?)
我希望在PHP中工作的东西在Node中也能工作,但显然不是这样。PHP有什么不同?(PHP在运行Alpine Nginx的Docker镜像中,这是一个非常普通的PHP应用程序,只是显示了一些带有数据库内容的页面)。
编辑:主持人引用的答案绝对没有回答这个问题。首先,它引用了一个在MySql 8中不存在的配置,其次,在新的v8配置文件中没有BIND语句。第三,他们甚至不在同一个地方。而且推荐的答案甚至没有出现在“类似问题”列表中。请重新讨论此问题以获得进一步帮助。

hfsqlsce

hfsqlsce1#

要在Docker中对MySQL 8进行身份验证,您可以使用以下步骤:
1.启动MySQL 8容器,开启mysql_native_password认证插件。
这可以通过将--default-authentication-plugin=mysql_native_password标志传递给docker run命令来完成。例如,以下命令将启动启用了mysql_native_password身份验证插件的MySQL 8容器:
docker run -p 3306:3306 --name mysql_80 -e MYSQL_ROOT_PASSWORD=password -d mysql:8 mysqld --default-authentication-plugin=mysql_native_password
1.使用MySQL客户端连接MySQL 8容器。
您可以使用任何MySQL客户端连接到容器,例如MySQL CLI或MySQL CLI。连接时,请确保使用启动容器时指定的root用户和密码。
例如,要使用MySQL CLI连接到MySQL 8容器,您可以使用以下命令:

mysql -u root -p -h localhost -P 3306

出现提示时,输入启动容器时指定的密码。
连接后,您可以使用MySQL客户端向MySQL服务器发出命令。例如,要创建一个新的数据库,可以使用以下命令:

CREATE DATABASE my_database;

**注意:**如果您使用的MySQL客户端不支持caching_sha2_password认证插件,则需要使用mysql_native_password认证插件。为此,您可以在连接到MySQL服务器时指定--default-authentication-plugin=mysql_native_password标志。
示例:

mysql -u root -p --default-authentication-plugin=mysql_native_password -h localhost -P 3306

安全注意事项:

  • 请确保为MySQL root用户使用强密码。
  • 请考虑在日常使用中使用不同的用户帐户,并仅在必要时使用root用户。
  • 使用最新的安全补丁保持MySQL软件处于最新状态。

相关问题