将 .net core 通过容器docker 部署到 linux 记录
1. add docker to linux 执行
(官方脚本 安装) curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
或
(国内 daocloud 一键安装命令) curl -sSL https://get.daocloud.io/docker | sh
如果通过以上方法提示nokey 什么的 尝试以下方式
sed -i 's/download.docker.com/mirrors.cloud.tencent.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo
安装完后默认是没有启动的 .需要启动执行以下命令
systemctl enable docker --now (--now 现在启动)
查询docker是否运行了
systemctl status docker
开启防火墙, 开启http/https 开启转发服务(不开外网访问不了,为是容器需要) 开放5000的端口
&& firewall-cmd --permanent --add-service=http \
&& firewall-cmd --permanent --add-service=https \
&& firewall-cmd --permanent --add-masquerade \
FROM mcr.microsoft.com/dotnet/core/aspnet:2.1
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
WORKDIR /coretest
ENV ASPNETCORE_URLS http://+:5000 #net 运行时使用的端口号不指定默认启动时将绑定80端口
ENTRYPOINT ["dotnet", "testCore.dll"]
生成镜像
docker build -t webapi .
webapi 指生成的docker 镜像名, 后面的 . 指当前目录
查询当前已生成的镜像
docker images
server {
listen 80;
server_name 公网的地址;
location / {
#Proxy Settings
proxy_pass http://127.0.0.1:5000; #这里是映射的内网的地址
proxy_set_header Host $proxy_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_pass_header Server;
proxy_redirect off;
proxy_set_header X-Scheme $scheme;
proxy_pass_request_headers on;
add_header Static Nginx-Proxy;
}
}
----如果需要将服务器设为代理服务器 需要卸载 监控程序(一般服务器都有)
以下为腾讯云 监控软件 的卸载
sh /usr/local/qcloud/stargate/admin/uninstall.sh && \
sh /usr/local/qcloud/monitor/barad/admin/uninstall.sh
如果 docker运行失败处理步骤(以下为个人处理方式 ,不保证是最优的)
1. 注释dockerFile里的 ENTRYPOINT ["dotnet", "dockertest.dll"] 即 #ENTRYPOINT ["dotnet", "dockertest.dll"]
2. 重新生成images 然后创建新docker运行
3. 使用命令 sudo docker exec -it docker id或dockername /bin/bash 进入docker内部(注意把程序生成debugger版本的) 然后直接dotnet 你的程序集.dll 就会看到程序具体的异常信息如下图
进入docker后的显示 (最后几行sa@xxxx 的是我的服务器的) root@xxxx 这个是进入docker后的.也可以使用dotnet --info查看 docker里dotnet的信息