我在dotnet core2.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"应用程序已停靠,我使用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是已配置的用户,没有访问我的数据库的权限。
运行列出了我所有容器的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:对如何继续前进有什么建议吗?
发布于 2019-05-14 01:29:21
您是否100%确定凭据与MySQL上的用户匹配?注意,MYSQL_USER和MYSQL_PASSWORD只在第一次创建数据库时使用一次,所以如果您在保留数据库的同时更改了它们,那么您认为凭据的ENV变量与数据库中的变量相匹配的假设就不再正确。
如果是这种情况,那么您可以删除数据库并重新开始。由于您正在使用命名卷,因此需要手动删除它(在使用rm命令时,docker rm永远不会删除命名卷,只会删除匿名卷)。
要删除命名卷,可以使用以下命令:
docker volume rm xxxx_dbdata其中xxxx应为您的项目名称(您的撰写文件所在的目录)。您还可以通过执行docker volume ls来查看docker卷的列表。
发布于 2019-05-14 10:25:13
确保在docker-compose中指定了端口
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中创建一个网络吗?
https://stackoverflow.com/questions/56117123
复制相似问题