到目前为止,这真的很痛苦!我只是想将最近的Mono版本放到我的Ubuntu docker容器中!似乎Ubuntu发行版已经过时了,我需要获得最近的构建,以便我可以从中运行ServiceStack API。
这是我的泊坞文件:
#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"]
哪个也行不通!
有没有人设法做到这一点?当然它应该比这更容易吗?
答案 0 :(得分:2)
这里有一些东西似乎有点"奇怪"对我来说。
首先,您RUN
一个sudo bash
(要更改用户,您应该使用USER
指令)。从容器的开头,您将具有root访问权限,因此您无需执行此操作。
在每个RUN
命令中,您将为该图层生成一个新容器,我建议您将所有apt-get
命令设置为一行(尽管这不太重要):
RUN apt-get -y install git autoconf libtool g++ gettext make mono-complete
(当您从非交互式环境中运行apt-get install
时,我建议您也设置ENV DEBIAN_FRONTEND noninteractive
,这样您就不会收到任何提示。)
使用您的Ubuntu版本时,apt源可能会过时。为了确保您可以正确下载所有包,我建议您在执行此操作之前在apt-get install
之前运行更新。
RUN apt-get update
如上所述,每个"层" Dockerfile创建了一个新容器,因此在cd
中使用RUN
将无法正常工作。您应该使用WORKDIR
指令代替:
WORKDIR /home/mono
运行docker build
时,每个步骤都可能产生错误。你应该在构建时检查输出。
考虑到这一切,我已经设法从Git构建单声道,它似乎执行。到达这一点的Dockerfile如下(我已经取出了ADD
和CMD
,请务必添加它们。我建议您查看https://docs.docker.com/reference/builder/上的Dockerfile参考。
一旦构建了容器,就可以通过运行docker run -t -i <IMAGE ID> /bin/bash
进入bash(至少使用Ubuntu基础)。图像ID将显示为Successfully built <ID HERE>
。从这里你可以调试你的图像无法正常工作的原因。
最后,可能需要构建FROM
已安装Mono的现有映像。例如,如果你想从https://registry.hub.docker.com/u/thaiphan/mono/进行构建,那就
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