部署过程不再赘述,主要按照下面操作:(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
加入上述代码,重启容器后,发现连接数据库成功。如果还是提示上述错误,建议直接删掉镜像,重新拉取和创建容器。