netcore 的docker 配置文件

FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim AS base  
WORKDIR /app  
COPY . .  
EXPOSE 80  
#设置时间为中国上海  
ENV TZ=Asia/Shanghai  
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone  
#修改包源 否则更新慢  
RUN sed -i 's#http://deb.debian.org#https://mirrors.aliyun.com#g' /etc/apt/sources.list  
RUN mkdir Log
#安装vim libgdiplus  ipconfig  ping  
RUN apt-get update && apt-get install -y vim && apt-get install -y libgdiplus && apt install net-tools && apt install -y  iputils-ping 
# 设置环境变量  
ENV MysqlDb "Data Source=xxx.xxx.xxx.xxx;Database=test;User ID=root;Password=123456&;pooling=true;port=3306;sslMode=None;CharSet=utf8;"  
ENTRYPOINT ["dotnet", "dockertest.dll"]  
注意

1 将此Dockerfile 文件拷贝到发布后的目录 比如c:/public
2 执行 >docker build -t dockerdemo . 后面有个英文点
3 发布容器 publish>docker run --name dockerdemo -e MysqlDb=fsdafafsdffffsdf -d -p 8077:80 dockerdemo

netcore 代码
 public void ConfigureServices(IServiceCollection services)
        {
            String MysqlDb= this.Configuration.GetValue<string>("MysqlDb");

            services.AddControllers();
        }

注意:获取配置变量的值的顺序
-e后面设置的变量值优先,其次是Dockerfile配置的变量值,最后是appsetting.json里面的值.
即 先取-e后的fsdafafsdffffsdf
如果没有设置则取ENV MysqlDb "Data Source=xxx.xxx.xxx.xxx;Database=test;User ID=root;Password=123456&;pooling=true;port=3306;sslMode=None;CharSet=utf8;"里的值
如果还没有 则取appsetting里的local

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "MysqlDb": "local",
  "AllowedHosts": "*"
}

容器内访问文件夹 /app 为网站的根目录 同Dockerfile中一致。 可以通过下面方式来写入文件内容

 System.IO.File.AppendAllText(@"/app/aaa/b.txt","test");

如果要保存到本机 ,可以做卷映射 -v c:/vol:/app/aaa 注意权限.
可以通过-u 来指定用户来运行docker。
更好的解决方式,安装gosu工具,执行如下的脚本:

#!/bin/bash

# 获取主机用户id
USER_ID=${LOCAL_USER_ID:-9001}
# 给主机用户授权制定的非绑定挂载目录
chown -R $USER_ID /project

# 创建和主机用户相同uid的用户,名为user
useradd --shell /bin/bash -u $USER_ID -o -c "" -m user
usermod -a -G root user
export HOME=/home/user
exec /usr/local/bin/gosu user "$@"
docker build -t dockerdemo .   #创建镜像
docker run --name dockerdemo -v c:/vol:/app/aaa  -d -p 8077:80 dockerdemo  #发布容器

参考文章 https://padeoe.com/docker-volume-file-permission-problem/
https://blog.csdn.net/boling_cavalry/article/details/93380447

Dockerfile文件 https://files.cnblogs.com/files/wang2650/Dockerfile.zip

posted @ 2021-01-28 10:37  过错  阅读(555)  评论(0编辑  收藏  举报