FROM microsoft/dotnet:0.0.1-alpha-onbuild RUN sudo apt-get -y update \ && sudo apt-get install -y dialog make automake libtool curl RUN curl -sSL https://github.com/libuv/libuv/archive/v1.8.0.tar.gz | sudo tar zxfv - -C /usr/local/src \ && cd /usr/local/src/libuv-1.8.0 \ && sudo sh autogen.sh \ && sudo ./configure \ && sudo make \ && \ && sudo rm -rf /usr/local/src/libuv-1.8.0 \ && cd ~/ \ && sudo ldconfig EXPOSE 5600
5.2.3 检测Dockerfile是否能正常使用
由于.NET Core时刻在更新,所以导致官网NET CLI Preview Docker image 提供的dotnet image更新不及时而在执行dotnet restore时候会报错:unknown keyword platform(主要是dotnet image内部的
.NET Core和CLI版本过旧,且存在bug),会导致基于它的咱们的Dockefile执行失败。 如果不确定你当前的dotnet image是否有上述问题,下面会介绍一种检测方法和问题的解决方案
(1)检测方法
执行下面命令加载dotnet image,且一般会自动启动test_container并进入到image内部环境中,如果你服务器上没有dotnet image,下面命令也会自动下载
docker run --name test_container -it microsoft/dotnet:latest
如果test_container未启动,则执行下面命令启动并关联进入
docker start test_container
dokcer attach test_container
进入到image内部环境中
mkdir test cd test it clone https://github.com/aspnet/cli-samples.git cd cli-samples dotnet restore
查看是否报错
清除测试文件
cd ~rm -r test
(2)解决方案
手工制作一个使用最新.NET Core SDK的dotnet image,也可以使用我已经做好的image sobit17/sobit-dotnet:1.0.0-beta-002252,当然如果没报错可以省略这一步,用回原来的dotnet image.
加载dotnet image
docker run --name dotnet_container -it microsoft/dotnet:0.0.1-alpha
如果dotnet_container 未启动,则执行下面命令启动并关联进入
docker start dotnet_container dokcer attach dotnet_container
查看.NET Core版本(dotnet image中使用的是Ubuntu14.04系统)
dotnet --version 或 dotnet --info
由于对应Ubuntu的dotnet package最高只到1.0.0-beta-00.1793,但这个版本也有上述bug。(查找可以使用apt-cache search XX|grep XX(XX为你知道的一部份软件名),也可以从这里查看)
所以不能利用
apt-get upgrade dotnet
或
apt-get remove dotnet = 1.0.0.001598-1
apt-get install dotnet=1.0.0.002252-1(Ubuntu没这个最新版本)
只能从github下载二进制文件,安装到最新版本(最新版本可以从github上面查到:)
apt-get update
-zxf dotnet-dev-ubuntu-x64.latest.tar.gz -C /usr/bin
或
apt-get update -zxf dotnet-dev-ubuntu-x64.latest.tar.gz ln -s /dn_new/dotnet /usr/bin/dotnet
接下来执行下面命令
dotnet --exit //退出容器 docker images //查找dotnet_container 的ConrainerID docker commit 3a09b2588478(ContainerID) dotnet_new(new image name) //commit成一个新的image
至此base image制作完毕。
接下来只要修改HelloMvc的Dockerfile以指定这个新的image作为基础镜像