使用docker在Ubuntu上安装Mono的最新版本

这到目前为止真的很痛苦! 我只想把最近的Mono版本join到我的Ubuntu docker容器中! 看来Ubuntu的发行版是可笑的过时了,我需要得到一个最近的构build,以便我可以从它运行一个ServiceStack API。

这是我的docker文件:

#DOCKER-VERSION 0.9.1 FROM ubuntu:14.04 ADD . /src RUN cd src RUN sudo bash RUN apt-get -y install git RUN apt-get -y install autoconf RUN apt-get -y install libtool RUN apt-get -y install g++ RUN apt-get -y install gettext RUN apt-get -y install make RUN apt-get -y install mono-complete RUN git clone git://github.com/mono/mono.git /home/mono RUN cd /home/mono RUN ./autogen.sh --prefix=/usr/local RUN make RUN make install CMD ["mono", "/build/Web.Api.exe"] 

我没有从源头上build立,我也尝试过:

 #DOCKER-VERSION 0.9.1 FROM ubuntu:14.04 MAINTAINER wayneo ADD . /src RUN sudo bash RUN apt-get update RUN apt-get -f install RUN apt-get -y -q install wget RUN wget -q http://download.opensuse.org/repositories/home:/tpokorra:/mono/xUbuntu_14.04/Release.key -O- | apt-key add - RUN apt-get remove -y --auto-remove wget RUN sh -c "echo 'deb http://download.opensuse.org/repositories/home:/tpokorra:/mono/xUbuntu_14.04/ /' >> /etc/apt/sources.list.d/mono-opt.list" RUN apt-get -q update RUN apt-get -y -q install mono-opt CMD ["/opt/mono/bin/mono", "/src/build/Web.Api.exe"] 

哪个也行不通!

有没有人设法做到这一点? 当然应该比这更容易?

这里有几件事对我来说似乎有点“奇怪”。

首先,你RUN一个sudo bash (改变用户你应该使用USER指令)。 从你的容器开始,你将拥有root权限,所以你不需要这样做。

在每一个RUN命令中,你都会为这一层产生一个新的容器,我build议你把所有的apt-get命令做成这样(尽pipe这不是太重要):

 RUN apt-get -y install git autoconf libtool g++ gettext make mono-complete 

(因为您正在从非交互式环境中运行apt-get install ,所以我build议您也设置ENV DEBIAN_FRONTEND noninteractive以免出现任何提示。)

很可能你的Ubuntu版本的apt源将会过时。 为了确保你可以正确地下载你所有的软件包,我build议你在执行apt-get install之前运行更新。

 RUN apt-get update 

如上所述,Dockerfile的每个“层”都会创build一个新的容器,所以在RUN使用cd无法工作。 您应该使用WORKDIR指令来代替:

 WORKDIR /home/mono 

运行docker build时,每个步骤都可能产生错误。 你应该在构build时检查输出。

考虑到这一切,我设法从Git构build单声道,似乎执行。 Dockerfile得到这一点是(我已经拿出你的ADDCMD ,一定要添加它们)。 我build议你查看https://docs.docker.com/reference/builder/上的Dockerfile参考。

一旦你build立了容器,你可以通过运行docker run -t -i <IMAGE ID> /bin/bash进入bash(至less在Ubuntu的基础上)。 图像ID将显示为Successfully built <ID HERE> 。 从这里你可以debugging你的图像无法正常工作的原因。

最后,build立一个已安装了Mono的现有图像可能是值得的。 如果你想从https://registry.hub.docker.com/u/thaiphan/mono/构build,例如,你会&#x505A;

 FROM thaiphan/mono 

而不是ubuntu 。 您也可以ADD自己的文件并添加自己的CMD

我使用Mono制作的Dockerfile:

 FROM ubuntu:14.04 ENV DEBIAN_FRONTEND noninteractive RUN apt-get update RUN apt-get -y install git autoconf libtool g++ gettext make mono-complete RUN git clone git://github.com/mono/mono.git /home/mono WORKDIR /home/mono RUN ./autogen.sh --prefix=/usr/local RUN make && make install