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

使用docker在Ubuntu上安装最新版本的Mono,ubuntu,mono,docker,Ubuntu,Mono,Docker,到目前为止,这真的很痛苦!我只想在我的Ubuntu docker容器中安装Mono的最新版本!看起来Ubuntu发行版已经过时了,我需要一个最新的版本,这样我才能从中运行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 ap

到目前为止,这真的很痛苦!我只想在我的Ubuntu docker容器中安装Mono的最新版本!看起来Ubuntu发行版已经过时了,我需要一个最新的版本,这样我才能从中运行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"]
我没有从源头上进行建设,而是尝试了:

#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"]
这也不行


有人做到了吗?当然应该比这容易些吧?

这里有一些事情对我来说似乎有点“奇怪”

首先,运行
a
sudobash
(要更改用户,应使用
user
说明)。从容器开始,您就拥有root访问权限,因此无需执行此操作

在每个
运行
命令时,您将为该层生成一个新的容器,我建议您将所有
apt get
命令设置为这样一行(尽管这并不太重要):

(当您在非交互式环境中运行
apt get install
时,我建议您也将
ENV DEBIAN\u FRONTEND设置为非交互式
,这样您就不会收到任何提示。)

有可能你的Ubuntu版本的apt源代码已经过时了。为了确保您可以正确下载所有软件包,我建议您在执行此操作之前,先运行更新,然后再
apt get install

RUN apt-get update
如上所述,Dockerfile的每个“层”都会创建一个新的容器,因此在
RUN
中使用
cd
是行不通的。您应该使用
WORKDIR
指令来代替:

WORKDIR /home/mono
运行
docker build
时,每个步骤都可能产生错误。您应该在构建时检查输出

考虑到所有这些,我成功地从Git构建了mono,它似乎可以执行。到达这一点的Dockerfile如下(我已经取出了您的
ADD
CMD
,请务必添加它们)。我建议您在查看Dockerfile参考

构建完容器后,您可以通过运行
dockerrun-t-i/bin/bash
进入bash(至少在Ubuntu基础上)。图像ID将显示为成功构建的
。从这里,您可以调试图像无法正常工作的原因

最后,从安装了Mono的现有映像中构建
可能是值得的。例如,如果您想从中构建,您会这样做

FROM thaiphan/mono
而不是ubuntu
。然后,您还可以添加自己的文件,并添加自己的
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
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