网上很多文章都是在win10下,用Docker for windows工具进行Docker的安装部署的。用知道windows server 2016已经原生支持Docker了,其windows Container已经和Linux下的内核技术是一致的了,况且最重要的原因就是Docker容器的部署肯定是在Windows server 上面的。所以何不尝个鲜,直接用windows server 2016上装个visual studio 2017来进行开发呢。

一、Windows Server 2016安装Docker

  在windows server 2016上面安装Docker十分的简单,不需要像win10一样,装个Dokcer for windows工具,也不需要开启Hyper-V建个Linux虚拟机了。直接在Shell命令下面运行如下命令:

Install-Module -Name DockerMsftProvider -Repository PSGallery -Force
Install-Package -Name docker -ProviderName DockerMsftProvider
Restart-Computer -Force

可以参考 Windows Containers on Windows Server

  重启完电脑,运行docker version会弹出如下界面,说明Docker已经安装完成

二、在ASP.NET Web Application项目上启用Docker的支持(注意不是.net core应用)

  使用Visual Studio 2017新建一个ASP.NET Web Application项目

在模板上随便选一个,这里不像.net core程序会有直接的Enable Docker Support的选项

没关系,我们可以直接在项目右键vs2017-》Add-》Docker Support

就会多出如下文件

基本上都是docker-compose和Dockerfile构建Docker容器用的。

三、启用Docker调试

如果这时按F5进行选择Docker进行调试,会出错,主要是docker-compose命令未找到。在Docker官网上找到了如下的说法:

Docker for MacDocker for Windows, and Docker Toolbox include Docker Compose, so most Mac and Windows users do not need to install Docker Compose separately.

If you are running the Docker daemon and client directly on Microsoft Windows Server 2016 (with Docker EE for Windows Server 2016), you do need to install Docker Compose.

To do this, start an “elevated” PowerShell (run it as administrator). Search for PowerShell, right-click, and choose Run as administrator. When asked if you want to allow this app to make changes to your device, click Yes.

Run the following command to download Docker Compose, replacing $dockerComposeVersion with the specific version of Compose you want to use:

Invoke-WebRequest "https://github.com/docker/compose/releases/download/$dockerComposeVersion/docker-compose-Windows-x86_64.exe" -UseBasicParsing 
-OutFile $Env:ProgramFiles\docker\docker-compose.exe

For example, to download Compose version 1.12.0, the command is:

none Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.12.0/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile $Env:ProgramFiles\docker\docker-compose.exe

Now, run the executable to install Compose.

参考: Install Docker Compose,我们先找一下docker-compose的最新版本https://github.com/docker/compose/releases,发现是1.13.0,那么那句话可以直接改为

Invoke-WebRequest "https://github.com/docker/compose/releases/download/1.13.0/docker-compose-Windows-x86_64.exe" -UseBasicParsing -OutFile $Env:ProgramFiles\docker\docker-compose.exe

满心期待的去运行F5,结果还是报错:

ERROR: client version 1.22 is too old. Minimum supported API version is 1.24, please upgrade your client to a newer version

查了一下,原来如果你使用Docker 1.13以上版本,需要将docker-compose.yml中的version: '2'修改为version: '2.1'也就是这里的version

真的是一波三折,总算是没问题了,编译也能通过了。可是当调试F5的时候,却偏偏又出现远程调试错误。。。

这个时候,运行docker ps的命令,可以看到我们的容器已经启动了

我们查看一下容器IP

docker inspect --format="{{.NetworkSettings.Networks.nat.IPAddress}}" $CONTAINER_ID

然后直接在游览器中访问,已经可以看到网站在运行了。

这个真的是蛮坑的地方,网上也没有相关资料,倒是在stackoverflow发现相关问题:Running Visual Studio Remote Debugger in Windows Container (Docker managed),但是没什么用。最后想了半天,原来是server版的限制比较高,必须在防火墙中开发端口,或者直接关掉防火墙,就OK了。

参考:

BUILD AND RUN YOUR FIRST DOCKER WINDOWS SERVER CONTAINER

Docker的Windows容器初体验

Docker容器环境下ASP.NET Core Web API应用程序的调试

Visual Studio 2017 调试 windows server 2016 Docker Container的更多相关文章

  1. 在docker中运行ASP.NET Core Web API应用程序(附AWS Windows Server 2016 widt Container实战案例)

    环境准备 1.亚马逊EC2 Windows Server 2016 with Container 2.Visual Studio 2015 Enterprise(Profresianal要装Updat ...

  2. windows server 2016 docker 之创建使用虚拟交换机

    windows server 2016 Create a virtual switch for Hyper-V virtual machines 操作步骤: 服务器只有一块网卡连接了网络 尝试1: h ...

  3. Visual Studio 2017 调试器的工作进程(msvsmon.exe)意外退出 调试将终止

    开发环境: Windows 10 in Parallels Desktop Visual Studio 15.6 场景还原: 使用 Visual Studio 15.6 (即 Visual Studi ...

  4. 使用Visual Studio 2017构建.Net Core的Docker镜像

    1 Docker  镜像优化 微软在为开发人员生成 Docker 镜像时,提供以下三种主要方案: 用于开发 .NET Core 应用的 镜像 用于构建生成 .NET Core 应用的 镜像 用于运行 ...

  5. Visual Studio 2017调试开源项目代码

    在我们的开发过程中很多时候我们会从GitHub上面下载一些开源的项目代码,然后在此基础上进行调试,正常情况下我们只需要将项目的源代码编译成Dll或者在.Net Core项目中直接引用相应的Nuget包 ...

  6. 如何使用Visual Studio 2017调试.net库源代码

    在Visual Studio 2017按如下步骤设置: 1.取消选中(工具 - >选项 - >调试 - >仅我的代码)复选框.2.确保设置了(工具 - >选项 - >调试 ...

  7. visual studio 2017发布dotnet core到docker

    docker的好处不用多说,有不了解的可移步<docker入门>,作为一个.net方面的老鸟也想早点搭上docker末班车,减少布署中的各种坑.以下我是在Visual Studio 201 ...

  8. Visual Studio 2017:SQLite/SQL Server Compact ToolBox使用

    1.首先是下载安装插件:SQLite/SQL Server Compact Toolbox,也可以从工具-->扩展和更新-->联机-->搜索:SQLite/SQL Server Co ...

  9. visual studio 2017调试时闪退。

    解决方案: 在工程上右键--->属性--->配置属性--->连接器--->系统--->子系统(在窗口右边)--->下拉框选择控制台(/SUBSYSTEM:CONSO ...

随机推荐

  1. Floyd 和 bellman 算法

    Floyd-Warshall算法(Floyd-Warshall algorithm)是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包. F ...

  2. iOS 图片加载速度极限优化—FastImageCache解析

    FastImageCache是Path团队开发的一个开源库,用于提升图片的加载和渲染速度,让基于图片的列表滑动起来更顺畅,来看看它是怎么做的.优化点iOS从磁盘加载一张图片,使用UIImageVIew ...

  3. my97date 时间范围限制

    需求:根据开始时间,动态限制结束时间 实现: <!DOCTYPE html> <html lang="en"> <head> <meta ...

  4. IIS6独立用户建立网站的方法,提高网站安全性

    在Windows server 2003系统下,用IIS架设Web服务器,合理的为每个站点配置独立的Internet来宾账号,这样可以限制Internet 来宾账号的访问权限,只允许其可以读取和执行运 ...

  5. 解决react-router 的activeClassName 首页重复匹配问题

    首先先看一下我的inedx.js入口文件: 这是未点击的时候index默认的是选中状态, 这是我点击其他的路由之后:,明显index路由重复了,仔细看了官方文档之后,发现其实Navlink也应该使用e ...

  6. 《Lua程序设计》第7章 迭代器与泛型for 学习笔记

    本章将介绍如何编写适用于泛型for的迭代其(Iterator).7.1 迭代器与closurehttp://www.cnblogs.com/moonlightpoet/p/5685275.html 7 ...

  7. MD5加密与base64编码

    转自:http://blog.csdn.net/sxzlc/article/details/74127268 import java.io.UnsupportedEncodingException; ...

  8. Malab 常用数学函数

    l        三角函数和双曲函数 名称 含义 名称 含义 名称 含义 sin 正弦 csc 余割 atanh 反双曲正切 cos 余弦 asec 反正割 acoth 反双曲余切 tan 正切 ac ...

  9. 【MySQL8】 安装后的简单配置(主要解决navicat等客户端登陆报错问题)

    一.navicat等客户端登陆报错的原因 使用mysql,多数我们还是喜欢用可视化的客户端登陆管理的,个人比较喜欢用navicat.一般装好服务器以后,习惯建一个远程的登陆帐号,在mysql8服务器上 ...

  10. webapck html-loader实现资源复用

    1.安装 npm i html-loader --save-dev 2.项目目录 layout文件夹下的footer.html文件为: <script type="text/javas ...