.net5 webapi 部署docker 后无法连接到oracle数据库

发布时间 2023-04-26 10:24:20作者: 流星rain

部署过程不再赘述,主要按照下面操作:(8条消息) docker 发布.net 5 webapi_今夜來看雪的博客-CSDN博客

因为是windows 服务器,安装docker后,直接使用powershell 命令操作,也可以使用docker客户端操作。

我使用的是命令操作,主要是以下命令:

CD到发布的webapi文件夹下

然后创建镜像:  注意-t 后面是镜像名称,镜像名称后面加空格,然后再加“.” 。在docker客户端如下所示

  docker build -t rcaps .

 

 

 

然后启动 ,--name后面是自己定义名称,-p是对外暴漏的端口号。

docker run --name rcaps_docker -p 8081:5001 -d rcaps

在docker  客户端 Containers 中如下。

启动成功后,可以直接点击端口号在浏览器中访问接口

但是问题来了,前面一切顺利,数据库无法联通,提示如下:

{
  "dataInfo": "RCSolution.Frame.Infrastructure.Exceptions.DataAccessException: 中文提示 :  连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:ORA-00604: error occurred at recursive SQL level 1\nORA-01882: timezone region not foundDbType=\"Oracle\";ConfigId=\"SysManager\".\r\nEnglish Message : Connection open error . ORA-00604: error occurred at recursive SQL level 1\nORA-01882: timezone region not foundDbType=\"Oracle\";ConfigId=\"SysManager\"\n ---> SqlSugar.SqlSugarException: 中文提示 :  连接数据库过程中发生错误,检查服务器是否正常连接字符串是否正确,错误信息:ORA-00604: error occurred at recursive SQL level 1\nORA-01882: timezone region not foundDbType=\"Oracle\";ConfigId=\"SysManager\".\r\nEnglish Message : Connection open error . ORA-00604: error occurred at recursive SQL level 1\nORA-01882: timezone region not foundDbType=\"Oracle\";ConfigId=\"SysManager\"\n   at SqlSugar.Check.Exception(Boolean isException, String message, String[] args)\n   at SqlSugar.AdoProvider.CheckConnection()\n   at SqlSugar.OracleProvider.GetCommand(String sql, SugarParameter[] parameters)\n   at SqlSugar.AdoProvider.GetDataReaderAsync(String sql, SugarParameter[] parameters)\n   at SqlSugar.QueryableProvider`1.GetDataAsync[TResult](KeyValuePair`2 sqlObj)\n   at SqlSugar.QueryableProvider`1._ToListAsync[TResult]()\n   at RCSolution.Frame.Core.Repository`1.GetAllAsync() in D:\\杉数\\杉数荣程APS\\Code\\CodeGit\\rcaps\\Service\\RCSolution.Frame.Core\\Repository\\Repository.cs:line 99\n   --- End of inner exception stack trace ---\n   at RCSolution.Frame.Core.Repository`1.GetAllAsync() in D:\\杉数\\杉数荣程APS\\Code\\CodeGit\\rcaps\\Service\\RCSolution.Frame.Core\\Repository\\Repository.cs:line 104\n   at RCSolution.Frame.Services.Sys.MoltenSteel.MoltenSteelService.GetAllUsers2() in D:\\杉数\\杉数荣程APS\\Code\\CodeGit\\rcaps\\Service\\RCSolution.Frame.Services\\Sys\\MoltenSteel\\MoltenSteelService.cs:line 32\n   at RCSolution.Frame.WebApi.Controllers.MoltenSteelsController.GetMoltenSteelMsg() in D:\\杉数\\杉数荣程APS\\Code\\CodeGit\\rcaps\\Service\\RCSolution.Frame.WebApi\\Controllers\\MoltenSteelsController.cs:line 70",
  "isSucceed": true,
  "message": null,
  "statusCode": 200
}

这里主要看日志中的第二个错误提示,如下

ORA-01882: timezone region not foundDbType
查看时了解到时因为配置docker时连接oracle数据库要设置时区。参考(8条消息) 解决netcore在docker容器中连接oracle报错(timezone region not found)_xtjatswc的博客-CSDN博客,要在dockerfile文件中添加时区设置
#ENV TZ=Asia/Shanghai
#RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

加入上述代码,重启容器后,发现连接数据库成功。如果还是提示上述错误,建议直接删掉镜像,重新拉取和创建容器。