首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接到docker中的MySQL实例时出错

问连接到docker中的MySQL实例时出错
EN

Stack Overflow用户
提问于 2019-05-14 01:23:04
回答 2查看 285关注 0票数 0

我在dotnet core2.1中有一个非常简单的应用程序,它可以与MySQL数据库对话。应用程序使用实体框架,如下所示:

代码语言:javascript
复制
var connectionString = Configuration.GetConnectionString("DatabaseConnection");
services.AddDbContext<ChtrDbContext>(options => options.UseMySql(connectionString));

其中connectionString如下所示:

代码语言:javascript
复制
"DatabaseConnection": "Server=db;port=3306;Database=chtr;userid=dbuser;Password=dbuserpassword"

应用程序已停靠,我使用docker-compose up --build启动环境。

当我导航到localhost:8080/graphql (这是我的GraphiQL端点)并尝试对数据库执行一个简单的查询时,我无法登录。这是日志文件:

代码语言:javascript
复制
 Access denied for user 'dbuser'@'172.19.0.3' (using password: YES)
chtr.server_1  |    at MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) in C:\projects\mysqlconnector\src\MySqlConnector\Core\ServerSession.cs:line 360

它显示dbuser是已配置的用户,没有访问我的数据库的权限。

运行列出了我所有容器的docker ps,我可以看到mysql容器正在运行。然后再次运行docker inspect chtrserver_db_1,这是容器的名称。向下滚动到此json文件的Config部分将显示以下内容:

代码语言:javascript
复制
"Env": [
                "MYSQL_RANDOM_ROOT_PASSWORD=1",
                "MYSQL_DATABASE=chtr",
                "MYSQL_USER=dbuser",
                "MYSQL_PASSWORD=dbuserpassword",
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
                "GOSU_VERSION=1.7",
                "MYSQL_MAJOR=5.7",
                "MYSQL_VERSION=5.7.26-1debian9"
            ],

好了,我已经确认docker容器正在运行,并且连接字符串中指定的凭据等于容器中配置的凭据。为什么我仍然不能登录?

docker-compose.yml文件如下所示:

版本:'3.0‘

代码语言:javascript
复制
services:
   db:
     image: mysql:5.7
     environment:
       MYSQL_RANDOM_ROOT_PASSWORD: 1
       MYSQL_DATABASE: chtr
       MYSQL_USER: dbuser
       MYSQL_PASSWORD: dbuserpassword
     volumes:
       - dbdata:/var/lib/mysql
       - ./Scripts:/docker-entrypoint-Dataseed.d
     restart: always

   chtr.server:
     depends_on:
       - db
     image: trebias/chtr.server
     build:
       context: .
     ports:
       - "8080:80"

volumes:
    dbdata:

对如何继续前进有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-05-14 01:29:21

您是否100%确定凭据与MySQL上的用户匹配?注意,MYSQL_USER和MYSQL_PASSWORD只在第一次创建数据库时使用一次,所以如果您在保留数据库的同时更改了它们,那么您认为凭据的ENV变量与数据库中的变量相匹配的假设就不再正确。

如果是这种情况,那么您可以删除数据库并重新开始。由于您正在使用命名卷,因此需要手动删除它(在使用rm命令时,docker rm永远不会删除命名卷,只会删除匿名卷)。

要删除命名卷,可以使用以下命令:

代码语言:javascript
复制
docker volume rm xxxx_dbdata

其中xxxx应为您的项目名称(您的撰写文件所在的目录)。您还可以通过执行docker volume ls来查看docker卷的列表。

票数 1
EN

Stack Overflow用户

发布于 2019-05-14 10:25:13

确保在docker-compose中指定了端口

代码语言:javascript
复制
services:
    db:
     image: mysql:5.7
     environment:
       MYSQL_RANDOM_ROOT_PASSWORD: 1
       MYSQL_DATABASE: chtr
       MYSQL_USER: dbuser
       MYSQL_PASSWORD: dbuserpassword
     volumes:
       - dbdata:/var/lib/mysql
       - ./Scripts:/docker-entrypoint-Dataseed.d
     restart: always
     ports:
       - "3306:3306"

阿洛斯,你要在你的docker-compose中创建一个网络吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56117123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档