net core docker
1.如果使用运行目录挂载模式,那么需要在run时使用 entrypoint指定 dotnet 和 [projectname].dll,如果不加则容器运行不起来,asp.net的程序则不需要这个。注意格式不能错,
docker run -d --name mymvc -e "ASPNETCORE_ENVIRONMENT=Development" -w "c:/app" -v "D:\mymvc\publish:c:/app" -p 5000:80 --entrypoint dotnet microsoft/dotnet:2.2-sdk-nanoserver-1803 mymvc.dll
docker build --t con_pxsesid_api:1.x .
docker run --name con_pxsesid_api_1 -p 533x:80 -d con_pxsesid_api:镜像版本号
mac下 主要是路径的不同
docker run -d --name mt-debug --privileged=true --restart=always -e "ASPNETCORE_ENVIRONMENT=Development" -w "/app" -v "/Users/Documents/docker_run/mt-core-2:/app" -p 5005:80 --entrypoint dotnet mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim mt.core.dll
ASPNETCORE_ENVIRONMENT可以不需要,这是为了方便调试使用。
除了dotnet 其他执行程序要放到 镜像后面。网上还真没查到,最后是看vs2017再使用docker调试模式时生成的docker run的格式调整而来。如果不是必须挂在模式,建议就使用打包模式,这样dockerfile更方便。
2.如果要把应用程序打包到镜像则使用build 和run配合来使用。
3.nat模式下,容器重启会导致IP变化,如果run时希望绑定IP则可以使用 docker run --ip ***.***.***.*** 。IP段可以不和Nat网关的IP段一致。但是注意,如果该Nat的subnet和gateway是空着的话,则不能指定固定IP。为空则通常是由于安装docker不完整导致(目前看来是)。查看network可以使用如下命令 docker network ls , docker network inspect [network id]
4.关于端口占用的问题。
大多数时候端口被占用后容器是启动不了的,但是有时候至少我发现端口被占用容器还能启动,而且浏览器访问还打不开,例如 localhost:5003,就打不开页面。
mac模式下:
sudo lsof -i tcp:5005 查找端口
sudo kill 14459 清除端口占用的进程 14459是进程id
5.发布之前可以 通过命令行运行下看看情况
现切换到应用到根目录 dotnet mt.core.dll