当前位置: 首页 > 编程日记 > 正文

如何为Linux设置Docker和Windows子系统:爱情故事。 ?

Do you sometimes feel you’re a beautiful princess turned by an evil wizard into a frog? Like you don’t belong? I do. I’m a UNIX guy scared to leave the cozy command line. My terminal is my castle. But there are times when I’m forced to use Microsoft Windows and I have learned a few tricks on how to cope with that.

有时您会觉得自己是一位美丽的公主,被邪恶的巫师变成了青蛙吗? 像你不属于? 我做。 我是一个UNIX人,不敢离开舒适的命令行。 我的终点站是我的城堡。 但是有些时候我不得不使用Microsoft Windows,并且我已经学会了一些技巧来应对这种情况。

For my daily terminal needs, I have installed Windows Subsystem for Linux along with the Ubuntu distribution. On top of that, I have a Linuxbrew installation which helps me manage any third-party apps I may need. This combination works surprisingly well! I have a nifty symbolic link to access all my “external” (that is Windows-hosted) data: ln -s ~/external /mnt/c/Users/DoomHammer and most of the needs are fulfilled this way. That is, unless I need to use Docker.

为了满足日常的终端需求,我已经安装了Windows Subsystem for Linux和Ubuntu发行版。 最重要的是,我安装了Linuxbrew,可以帮助我管理可能需要的任何第三方应用程序。 这种组合效果很好! 我有一个漂亮的符号链接来访问我的所有“外部”(Windows托管)数据: ln -s ~/external /mnt/c/Users/DoomHammer ,大多数需求都通过这种方式得到满足。 也就是说,除非我需要使用Docker。

Docker有何特别之处? (What’s so Special About Docker?)

Unlike most applications I typically use every day, Docker is a system application. This means its rooted deep into the system and requires an actual daemon to run on the host machine. And by the host machine, I mean native Microsoft Windows in that case.

与我通常每天使用的大多数应用程序不同,Docker是一个系统应用程序。 这意味着它已深入系统,并需要一个实际的守护程序才能在主机上运行。 在这种情况下,主机是指本机Microsoft Windows。

Does it mean you can’t use Docker from inside WSL? Not necessarily. But you need to flex your muscles a bit more to get there. First of all, you need to install Docker for Windows. There’s Docker Enterprise Editions for Windows Server 2016 (and up) and there’s Community Edition for Windows 10 Professional or Enterprise. And I was stuck at Windows 10 Home Edition.

这是否意味着您不能从WSL内部使用Docker? 不必要。 但是您需要多弯曲一些肌肉才能到达那里。 首先,您需要安装Docker for Windows。 有适用于Windows Server 2016(及更高版本)的Docker企业版以及适用于Windows 10专业版或企业版的社区版。 我被困在Windows 10家庭版上。

在Windows 10 Home上获取Docker (Getting Docker on Windows 10 Home)

It seems getting Docker to run on Windows 10 Home Edition is a bit more tricky. Docker Community Edition requires Hyper-V support which is unavailable on Home Edition. This means I needed to dig out Docker Toolbox, an older distribution which relied on Docker Machine and Virtualbox. But after installation, Virtualbox greeted me with a prompt saying it’s impossible to run virtualization.

让Docker在Windows 10家庭版上运行似乎有些棘手。 Docker Community Edition需要Hyper-V支持,而Home Edition则不提供。 这意味着我需要挖掘Docker Toolbox ,这是一个较早的发行版,依赖于Docker Machine和Virtualbox。 但是在安装后,Virtualbox提示我说不可能运行虚拟化。

As it turned out, I had the virtualization setting turned off in BIOS. Apparently for security reasons. I turned it on, opened Virtualbox again and… the same. This made me worried a bit. After a bit of Web crawling, I found the advice to check systeminfo. Well, it clearly showed *some* hypervisor is running. But not Virtualbox and most certainly not Hyper-V, right?

事实证明,我在BIOS中关闭了虚拟化设置。 显然是出于安全原因。 我将其打开,再次打开Virtualbox,然后…相同。 这让我有点担心。 经过一些Web爬网之后,我发现了检查systeminfo的建议。 好吧,它清楚地表明*某些*虚拟机监控程序正在运行。 但是不是Virtualbox,当然也不是Hyper-V,对吗?

To my surprise, it was Hyper-V all along. It seems Home Edition lacks the userland tools to actually use Hyper-V but it doesn’t mean that the Hypervisor itself wasn’t running. Thankfully, turning it off was just a bcdedit /set hypervisorlaunchtype off away. After I rebooted the machine Virtualbox was eager to work. Cool, score for me!

令我惊讶的是,一直以来都是Hyper-V。 看来Home Edition缺少实际使用 Hyper-V的用户界面工具,但这并不意味着Hypervisor本身并未运行。 值得庆幸的是,关闭它只是关闭了bcdedit /set hypervisorlaunchtype off 。 重新启动计算机后,Virtualbox渴望工作。 太酷了,为我得分!

Docker和WSL,永远最好的朋友? (Docker and WSL, Best Friends Forever?)

Having a working Virtualbox I opened Docker Quickstart Terminal. On the first run, it creates a Docker Machine (that’s why it needs Virtualbox) to act as a host for all the containers. I typed docker run --rm hello-world and watched the progress bar as Docker downloaded the appropriate image for me. Another score!

在具有可用的Virtualbox的情况下,我打开了Docker Quickstart Terminal。 在第一次运行时,它会创建一个Docker Machine(这就是为什么需要Virtualbox)充当所有容器的主机的原因。 我输入了docker run --rm hello-world并看着进度条,因为Docker为我下载了适当的映像。 另一个分数!

Now, instead of the cmd.exe I’d like to use Docker from the comfort of my WSL. How do I do that? Fortunately, WSL has access to native Windows binaries. This means I can run docker-machine.exe ls to see the machine created by Docker Toolbox. It should be right there named simply default. If the state is anything else than “Running” you can start it with docker-machine.exe start. Each time you want to run Docher Machine remember that unlike in cmd.exe the extension (.exe) is mandatory.

现在,我想从WSL的舒适性出发而不是cmd.exe 。 我怎么做? 幸运的是,WSL可以访问本机Windows二进制文件。 这意味着我可以运行docker-machine.exe ls来查看由Docker Toolbox创建的机器。 它应该在那里命名为简单的default 。 如果状态不是“正在运行”,则可以使用docker-machine.exe start来启动它。 每次要运行Docher Machine时,请记住,与cmd.exe不同,扩展名( .exe )是强制性的。

Normally we would call docker-machine.exe env to set the environment variables.

通常我们会调用docker-machine.exe env来设置环境变量。

Unfortunately it outputs the variables in a format understood by cmd.exe, not by any Bourne-compatible shell like bash or zsh. But we can change this behavior with docker-machine.exe env --shell sh.

不幸的是,它以cmd.exe理解的格式输出变量,而不是像Bash或zsh这样的任何与Bourne兼容的shell都可以理解。 但是我们可以使用docker-machine.exe env --shell sh更改此行为。

Hmm, almost there. But there’s one thing left hanging. The certificate path is written as a Windows path. How to translate into something WSL understands? For some time now, WSL features a nice utility called wslpath. Thanks to this tool we can call export DOCKER_CERT_PATH=$(wslpath $DOCKER_CERT_PATH) and we're almost ready.

嗯,快到了。 但是还有一件事悬而未决。 证书路径被写为Windows路径。 如何将WSL理解为某种东西? 一段时间以来 ,WSL都有一个不错的实用程序wslpath 。 由于这个工具,我们可以称之为export DOCKER_CERT_PATH=$(wslpath $DOCKER_CERT_PATH)和我们差不多准备好了。

We still need the userland tools. So, using your favorite package manager install both the Docker Engine and Docker Compose. For me this means brew install docker docker-compose. After that a docker run --rm hello-world should yield exactly the same results as it did in a Docker Toolbox terminal. Congratulations!

我们仍然需要userland工具。 因此,使用您喜欢的软件包管理器安装Docker Engine和Docker Compose。 对我来说,这意味着brew install docker docker-compose 。 之后, docker run --rm hello-world应该会产生与Docker Toolbox终端完全相同的结果。 恭喜你!

这就是全部? (Is That All?)

No, of course not. You may quickly notice that bind-mount does not work correctly. That’s because the Docker daemon expects proper Windows paths, and WSL paths sadly cannot be translated automatically. But there are a few hacks we can use to improve the situation.

不,当然不是。 您可能会很快注意到,bind-mount无法正常工作。 这是因为Docker守护程序需要正确的Windows路径,而不幸的是WSL路径无法自动转换。 但是,我们可以使用一些技巧来改善这种情况。

Now, which hack you need depends of the version you are running. Hitting Win+R and typing winver you should see a dialog that says something around the lines:

现在,您需要哪种黑客取决于您所运行的版本。 击中Win + R并键入winver您应该会看到一个对话框,内容如下:

Microsoft Windows

微软Windows

If it’s actually 18.03 or newer you can edit /etc/wsl.conf to look like this:

如果实际是18.03或更高版本,则可以编辑/etc/wsl.conf ,如下所示:

[automount]
root = /
options = "metadata"

It means WSL would mount the C: drive under /c/ instead of the usual /mnt/c. Why is this important? Well, it’s important because that’s what Docker daemon expects of Windows paths. By the way: after you save the file, you need to re-login for the changes to take effect.

这意味着WSL将C:驱动器安装在/c/而不是通常的/mnt/c 。 为什么这很重要? 好吧,这很重要,因为这就是Docker守护进程对Windows路径的期望。 顺便说一句:保存文件后,您需要重新登录以使更改生效。

Warning! If you happen to use wsl-terminal this change will break it. Use the next method in such a case.

警告 ! 如果您碰巧使用wsl-terminal,则此更改将使其无效 。 在这种情况下,请使用下一个方法。

Another approach if you don’t want to re-login or if you’re stuck with an older version is to bind mount one mountpoint to the other like this:

如果您不想重新登录或使用旧版本,另一种方法是将一个安装点绑定到另一个安装点,如下所示:

sudo mkdir /c
sudo mount --bind /mnt/c /c

Quicker, but only available as long as you are logged in. You’ll have to repeat this the next time you reboot your machine or add it to your shell runtime configuration (like ~/.bashrc or ~/.zshrc). That’s because /etc/fstab does not work as expected on WSL.

更快,但仅在您登录后才可用。下次重新启动计算机或将其添加到Shell运行时配置(如~/.bashrc~/.zshrc )时,必须重复此操作。 这是因为/etc/fstab在WSL上无法按预期工作。

As you may have noticed, this means you are now able to run Docker with mounts, but only if your volumes are within the Windows filesystem. Since command line docker expects absolute paths this should be no big deal, but with Docker Compose you have to be extra careful. It allows to use relative paths and this way everything that starts with ./ won’t work.

您可能已经注意到,这意味着您现在可以使用挂载运行Docker,但前提是您的卷位于Windows文件系统中。 由于命令行docker期望绝对路径,这应该没什么大不了的,但是使用Docker Compose时,您必须格外小心。 它允许使用相对路径,这样以./开头的所有内容将不起作用。

If you absolutely insist on mounting WSL’s filesystem with Docker you can try replacing all those ./ with /c/Users/$USERNAME/AppData/Local/lxss along with the project’s $PWD. In this case $USERNAME does not mean your WSL username, but you Windows one.

如果你绝对坚持安装WSL与泊坞文件系统,你可以尝试更换所有.//c/Users/$USERNAME/AppData/Local/lxss与项目一起$PWD 。 在这种情况下, $USERNAME并不表示您的WSL用户名,而是Windows。

I thought it’d be clever to write a wrapper around Docker Compose to make it change the working directory into this lxss but unfortunately WSL has no rights to access it. And rightfully so, I think!

我认为为Docker Compose编写包装程序以使其将工作目录更改为此lxss但不幸的是WSL无权访问它。 我认为是正确的!

最后一堵墙 (One Last Wall)

We can run Docker and we can bind data directories. What else can we want? Maybe working port-forwarding? Unlike with Native solutions, using Docker through Docker Machine requires to call every service on $(docker-machine ip):$PORT instead of the usual localhost:$PORT. There is a way around it, albeit not a very elegant one:

我们可以运行Docker,并且可以绑定数据目录。 我们还想要什么? 也许正在进行港口转运? 与本机解决方案不同,通过Docker Machine使用Docker需要在$(docker-machine ip):$PORT而不是通常的localhost:$PORT上调用每个服务。 尽管不是很优雅,但是有一种解决方法:

#!/bin/sh# This script uses Virtualbox Port Forwarding to make all Docker services
# available on Windows host under `localhost`VBXMGMT=/c/Program\ Files/Oracle/VirtualBox/VBoxManage.exe# List all the running container ids
docker ps -q | while read -r i; do# List all the ports bound by this container<Paste>for port in $(docker port "$i" | cut -d'-' -f1); doport_num=$(echo "${port}" | cut -d'/' -f1)port_type=$(echo "${port}" | cut -d'/' -f2)echo "Create rule natpf1 for ${port_type} port ${port_num}""$VBXMGMT" controlvm "default" natpf1 "${port_type}-port${port_num},${port_type},,${port_num},,${port_num}"done
done

I believe you can write a wrapper around Docker to perform this dance each time you run a new container. I admit I haven’t tested it that way, as most of the time I’m satisfied with forwarding a single port.

我相信您可以在运行新容器时围绕Docker编写包装程序来执行此操作。 我承认我还没有那样做过测试,因为大多数时候我对转发单个端口感到满意。

I hope this will make your work with Docker on WSL much more pleasant. It certainly did this for me!

我希望这会使您在WSL上使用Docker的工作更加愉快。 它确实为我做到了!

参考书目 (Bibliography)

I wouldn’t have written this article if it wasn’t for the fine people who shared their knowledge. Every time I stumbled over some obstacle I could search for the existing solutions. Below, a list of articles and posts that helped me write this guide:

如果不是共享知识的优秀人士,我就不会写这篇文章。 每当我遇到障碍时,我都可以搜索现有的解决方案。 下面是帮助我撰写本指南的文章和帖子列表:

Setting Up Docker for Windows and WSL to Work FlawlesslyWith a couple of tweaks the WSL (Windows Subsystem for Linux, also known as Bash for Windows) can be used with Docker…nickjanetakis.comHow to access linux/Ubuntu files from Windows 10 WSL?Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute…superuser.comPort forwarding in docker-machine?You can still access the VBoxmanage.exe command from the VirtualBox used by docker machine: VBoxManage controlvm…stackoverflow.com

设置适用于Windows和WSL的Docker使其正常运行 通过一些调整,WSL(适用于Linux的Windows子系统,也称为Windows的Bash)可以与Docker一起使用... nickjanetakis.com 如何从Windows 10 WSL访问linux / Ubuntu文件? 超级用户是计算机爱好者和超级用户的问答网站。 加入他们; 只需要一分钟... superuser.com 在docker-machine中进行端口转发? 您仍然可以从docker机器使用的VirtualBox中访问VBoxmanage.exe命令:VBoxManage controlvm… stackoverflow.com

翻译自: https://www.freecodecamp.org/news/how-to-set-up-docker-and-windows-subsystem-for-linux-a-love-story-35c856968991/

相关文章:

再谈Spring Boot中的乱码和编码问题

编码算不上一个大问题&#xff0c;即使你什么都不管&#xff0c;也有很大的可能你不会遇到任何问题&#xff0c;因为大部分框架都有默认的编码配置&#xff0c;有很多是UTF-8&#xff0c;那么遇到中文乱码的机会很低&#xff0c;所以很多人也忽视了。 Spring系列产品大量运用在…

UDP 构建p2p打洞过程的实现原理(持续更新)

UDP 构建p2p打洞过程的实现原理(持续更新) 发表于7个月前(2015-01-19 10:55) 阅读&#xff08;433&#xff09; | 评论&#xff08;0&#xff09; 8人收藏此文章, 我要收藏赞08月22日珠海 OSC 源创会正在报名&#xff0c;送机械键盘和开源无码内裤 摘要 UDP 构建p2p打洞过程…

Vue父组件网络请求回数据后再给子组件传值demo示例

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 这里demo使用延迟执行模拟网络请求&#xff1b;父组件给子组件需要使用自定义属性 Prop &#xff0c;下面是示例代码&#xff1a; <!DOCTYPE html> <html> <head> <me…

gulp-sass_如果您是初学者,如何使用命令行设置Gulp-sass

gulp-sassby Simeon Bello通过Simeon Bello I intern at a tech firm presently, and few days ago I got a challenge from my boss about writing an article. So I decided to write something on Gulp-sass. Setting it up can be frustrating sometimes, especially when…

MyEclipse快捷键

MyEclipse快捷键 Ctrl1 快速修复CtrlD: 删除当前行 CtrlQ 定位到最后编辑的地方 CtrlL 定位在某行 CtrlO 快速显示 OutLine CtrlT 快速显示当前类的继承结构 CtrlW 关闭当前Editer CtrlK 快速定位到下一个 CtrlE 快速显示当前Editer的下拉列表CtrlJ 正向增量查找(按下C…

关于UNION和UNION ALL的区别

今天在运行程序的时候发现个问题&#xff0c;就是计算和的时候两条数据一样的话自动去除重复的&#xff0c;可是我这个程序需要重复的数据也算进来呀&#xff0c;然后就找原因&#xff0c;最后在sql语句中找到了是union和union all的问题&#xff0c;简单总结一下下。 当使用到…

html 写一个日志控件 查看log

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 使用场景&#xff0c; 示例访问&#xff1a;https://weixin.njkeren.cn/test1.html?user12 得到的效果图 实现代码 <!DOCTYPE html> <html><head><meta charset&q…

python开源项目贡献_通过为开源项目做贡献,我如何找到理想的工作

python开源项目贡献by Utsab Saha由Utsab Saha 通过为开源项目做贡献&#xff0c;我如何找到理想的工作 (How I found my dream job by contributing to open source projects) One of the concerns I often hear about from my coding students is, “How am I going to land…

JSON解析与XML解析的区别

JSON与XML的区别比较 1.定义介绍 (1).XML定义扩展标记语言 (Extensible Markup Language, XML) &#xff0c;用于标记电子文件使其具有结构性的标记语言&#xff0c;可以用来标记数据、定义数据类型&#xff0c;是一种允许用户对自己的标记语言进行定义的源语言。 XML使用DTD(d…

[matlab]Monte Carlo模拟学习笔记

理论基础&#xff1a;大数定理&#xff0c;当频数足够多时&#xff0c;频率可以逼近概率&#xff0c;从而依靠概率与$\pi$的关系&#xff0c;求出$\pi$ 所以&#xff0c;rand在Monte Carlo中是必不可少的&#xff0c;必须保证测试数据的随机性。 用蒙特卡洛方法进行计算机模拟的…

vue 网络请求 axios vue POST请求 vue GET请求 代码示例

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 1.安装 axios 和 vue-axios 和 qs &#xff08;qs是为了解决post默认使用的是x-www-from-urlencoded 请求&#xff0c;导致请求参数无法传递到后台&#xff09; $ npm install --save axio…

bff v2ex_语音备忘录的BFF-如何通过Machine Learning简化Speech2Text

bff v2exby Rafael Belchior通过拉斐尔贝尔基奥尔(Rafael Belchior) 语音备忘录的BFF-如何通过Machine Learning简化Speech2Text (The voice memo’s BFF — how to make Speech2Text easy with Machine Learning) Do you think recording voice memos is inconvenient becaus…

pat1094. The Largest Generation (25)

1094. The Largest Generation (25) 时间限制200 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueA family hierarchy is usually presented by a pedigree tree where all the nodes on the same level belong to the same generation. Your task is to …

web-view里面的网页能请求未配置的request域名吗

QQ技术交流群 173683866 526474645 欢迎加入交流讨论&#xff0c;打广告的一律飞机票 可以

.NET调用JAVA的WebService方法

调用WebService&#xff0c;最简单的办法当然是直接添加WEB引用&#xff0c;然后自动产生代理类&#xff0c;但是在调用JAVA的WebService时并没有这么简单&#xff0c;特别是对于SoapHeader的处理&#xff0c;在网上也有相关资料&#xff0c;但是都整理的不够清晰明了。根据网上…

适合初学者的数据结构_数据结构101:图-初学者的直观介绍

适合初学者的数据结构了解您每天使用的数据结构 (Get to know the data structures that you use every day) Welcome! Let’s Start with Some Vital Context. Let me ask you something:✅ Do you use Google Search? ✅ Do you use Google Maps? ✅ Do you use social med…

深入解析CSS样式层叠权重值

本文为转载内容&#xff0c;源地址&#xff1a;http://www.ofcss.com/2011/05/26/css-cascade-specificity.html 读到《重新认识CSS的权重》这篇&#xff0c;在文章最后给出了便于记忆的顺序&#xff1a; “important > 内联 > ID > 类 > 标签 | 伪类 | 属性选择 &…

VUE做一个公共的提示组件,显示两秒自动隐藏,显示的值父组件传递给子组件

需求&#xff1a;VUE做一个公共的提示组件&#xff0c;显示两秒自动隐藏&#xff0c;显示的值由父组件动态传给子组件。 效果图&#xff1a; 实现步骤&#xff1a; 1.创建一个子组件 Toptips.vue (它就是公共提示组件)&#xff0c; optips.vue代码如下&#xff1a; <temp…

Linux课堂随笔---第四天

用户账户简介 在Linux系统中有三大类用户&#xff0c;分别是root用户&#xff0c;系统用户和普通用户。 在Linux系统中&#xff0c;root用户UID为0&#xff0c;root用户的权限是最高的&#xff0c;普通用户无法执行的操作&#xff0c;root用户都能完成。所以也被称为超级用户。…

初级开发人员的缺点_作为一名初级开发人员,我如何努力克服自己的挣扎

初级开发人员的缺点by Syeda Aimen Batool通过Syeda Aimen Batool 作为一名初级开发人员&#xff0c;我如何努力克服自己的挣扎 (How I’m working to overcome my struggles as a junior developer) I believe the other name for coding is the “struggle”. And if you ar…

lintcode-136-分割回文串

136-分割回文串 给定一个字符串s&#xff0c;将s分割成一些子串&#xff0c;使每个子串都是回文串。 返回s所有可能的回文串分割方案。 样例 给出 s "aab"&#xff0c;返回 [ ["aa", "b"], ["a", "a", "b"] ] 标…

微信小程序把繁琐的判断用Js简单的解决

场景&#xff1a; 订单列表&#xff0c;有很多种订单状态&#xff0c;根据不同的订单状态要显示不同的css。 适用场景&#xff1a;需要根据数组下标判断不同的显示。 示例代码&#xff1a; this.data.order [{"_type":"1","custName":"…

数论(Lucas定理) HDOJ 4349 Xiao Ming's Hope

题目传送门 题意&#xff1a;求C (n,0),C (n,1),C (n,2)...C (n,n)中奇数的个数 分析&#xff1a;Lucas 定理&#xff1a;A、B是非负整数&#xff0c;p是质数。AB写成p进制&#xff1a;Aa[n]a[n-1]...a[0]&#xff0c;Bb[n]b[n-1]...b[0]。则组合数C(A,B)与C(a[n],b[n])*C(a[n-…

docker容器虚拟化技术_Docker,虚拟机和容器的全面介绍

docker容器虚拟化技术by shota jolbordi通过Shota Jolbordi Docker has been a buzzword for tech people for the last several years, and the more times goes by, the more often you hear about it. We’re seeing it more in job requirements, and more companies are …

IOS中的响应者链

响应者链就是当子视图不响应,父视图有响应事件,父视图响应 #import "RootViewController.h" #import "ResponderView.h" interface RootViewController ()endimplementation RootViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additi…

MySQL闪退问题的解决

刚刚学习了数据库&#xff0c;并且安装了MySQL&#xff0c;正当高兴之余&#xff0c;发现我的MySQL出现了闪退的显现。上网搜了好久的解决方案。最后解决了这个问题&#xff0c;也舒心了。 问题从这里开始&#xff1a; 接着我打开MySQL&#xff0c;寻思能不能用&#xff0c;结果…

HTML封装AJAX请求,在请求里面写登录的逻辑 ajax 网络请求 post

调用方法&#xff1a; 先引用config.js&#xff0c;然后调用封装网络请求。 里面三个参数 1.url&#xff0c; 2.请求需要提交的数据, 3.请求类型 // 获取二维码、背景图片接口 getScheduleInfo() {var url /v1/basketball/getQRCode.do;var params {phone: 13977284414}co…

oye pandora_我尝试了Pandora出色的功能优先级排序方法。 这是我学到的。

oye pandoraby Josh Temple通过乔什坦普尔 我尝试了Pandora出色的功能优先级排序方法。 这是我学到的。 (I tried Pandora’s brilliant method for feature prioritization. Here’s what I learned.) 潘多拉(Pandora)的方法和3美元的便签纸如何使利益相关者的管理变得轻而易…

2016-2017-2软件工程课程总结

2016-2017-2软件工程课程总结 本学期的软件工程课程终于在大家的共同努力下圆满落幕了&#xff0c;我们的暑假也正式开启&#xff0c;终于有时间写写这门课的总结了。 在2016年下半学期末的时候课程组就决定使用邹欣老师的书《构建之法》&#xff0c;由课程组长王瑞老师带领入构…

asp.net mvc jqgrid 同一个页面查询不同的表,jqgrid显示不同表的表头和数据并且分页...

基于我上一篇文章<a href"http://www.cnblogs.com/alasai/p/4765756.html">asp.net mvc excel导入</a>中不同的部门上传不同的excel文件类型&#xff0c;当在同一个页面查询时怎么办呢。 解决方案&#xff1a;根据传过来的表名和时间参数一次性把数据全部…