【发布时间】:2019-09-30 16:42:15
【问题描述】:
我在 dotnet core 2.1 中有一个非常简单的应用程序,它与 MySQL 数据库通信。该应用程序使用这样的实体框架:
var connectionString = Configuration.GetConnectionString("DatabaseConnection");
services.AddDbContext<ChtrDbContext>(options => options.UseMySql(connectionString));
connectionString 如下所示:
"DatabaseConnection": "Server=db;port=3306;Database=chtr;userid=dbuser;Password=dbuserpassword"
应用程序是 dockerized,我使用docker-compose up --build 启动环境。
当我导航到 localhost:8080/graphql(这是我的 GraphiQL 端点)并尝试对数据库进行简单查询时,我无法登录。这是日志文件:
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 没有访问我的数据库的权限。
Running docker ps 列出了我的所有容器,我可以看到 mysql 容器正在运行。然后我再次运行docker inspect chtrserver_db_1,这是容器名称。向下滚动到这个 json 文件的 Config 部分,我会得到以下信息:
"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'
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:
对如何前进有什么建议吗?
【问题讨论】:
-
你没有把端口暴露给mysql
-
@DanielA.White 需要解释一下吗?我猜它在我的 yml 文件中的端口部分下,但我对 docker 相当陌生。谢谢!
-
@DanielA.White,如果两个容器在同一个网络上,则不需要暴露 mysql 端口。
-
@codestation 他们是。
标签: c# mysql docker .net-core docker-compose