部署过程不再赘述,主要按照下面操作:docker 发布.net 5 webapi
因为是windows 服务器,安装docker后,直接使用powershell 命令操作,也可以使用docker客户端操作。
我使用的是命令操作,主要是以下命令:
CD到发布的webapi文件夹下
然后创建镜像: 注意-t 后面是镜像名称,镜像名称后面加空格,然后再加“.” 。
docker build -t rcaps .
在docker客户端如下所示
然后启动 ,–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数据库要设置时区。
主要是在dockerfile中设置,添加一下环境变量:
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
设置后,重启docker镜像,发现连接成功。如果还是错误,删掉现有镜像,重新拉取一个就可以了。