2016-04-29 49 views
0

我的目標是製作一個包含qt-android和android-studio工具的docker鏡像。我拿了dockerfile this one這個基地,而不是安裝software-properties-common,我已經安裝了build-essentiallibgl1­-mesa­-dev。 Java和theses庫都安裝成功,但是,然後像mkdir,ls,cd這樣的基本命令變得無法識別,從而使碼頭構建過程返回代碼127(未找到命令)。在docker中安裝openjdk刪除了基本的linux的逗號

有沒有人有想法,爲什麼會出現這種情況?

+0

你可以顯示你的Dockerfile嗎? – user2915097

回答

0

我發現,我甚至無法讓您的Dockerfile顯示該問題,而無需在圖像中進行一些更改。這實際上是你的問題,但該位是:

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ 
ENV PATH JAVA_HOME/bin 
ENV CLASSPATH JAVA_HOME/lib/tools.jar 
ENV MANPATH JAVA_HOME/man 
RUN export JAVA_HOME PATH CLASSPATH MANPATH 

應該改爲:

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ 
ENV PATH $PATH:$JAVA_HOME/bin 
ENV CLASSPATH $JAVA_HOME/lib/tools.jar 
ENV MANPATH $JAVA_HOME/man 

這是因爲當你設置PATH不應刪除它的當前內容(因此$PATH:)和您希望添加JAVA_HOME變量的值而不是字面字符串JAVA_HOME(因此爲$JAVA_HOME/bin)。

此外,您使用ENV設置的任何內容都不需要導出,因爲它可用於圖像中的每個過程。

我還必須安裝一些軟件包以使add-apt-repository可用,但我不是100%確定這是因爲ubuntu:latest是指我係統上的不同映像(可能您應該考慮使用標記對於您希望使用的特定版本,如ubuntu:xenial)。

我還必須安裝wget &我更正了許多使用wget -O -的地方,您不是故意的(因爲您明顯想將文件寫入磁盤)。

全Dockerfile這在我以前&能得到成功地構建(我沒有試運行它,因爲我沒把握預期的行爲&不懂你的語言)是:

# BASED ON : https://hub.docker.com/r/picoded/ubuntu-openjdk-8-jdk/~/dockerfile/ 

FROM ubuntu:latest 
MAINTAINER Inacio Medeiros <[email protected]> 
USER root 

# Install the python script required for "add-apt-repository" 
RUN apt-get update 
RUN apt-get install build-essential libgl1-mesa-dev -y --force-yes 

# Sets language to UTF8 : this works in pretty much all cases 
ENV LANG pt_BR.UTF-8 
RUN locale-gen $LANG 

# Install add-apt-repository 
RUN apt-get install software-properties-common python-software-properties wget -y --force-yes 

# INSTALL JAVA 
# ============================================================== 
# Setup the openjdk 8 repo 
RUN add-apt-repository ppa:openjdk-r/ppa 

# Install java8 
RUN apt-get update && apt-get install openjdk-8-jdk -y --force-yes 

# Setup JAVA_HOME and other environment variables, this is useful for docker commandline 
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ 
ENV PATH $PATH:$JAVA_HOME/bin 
ENV CLASSPATH $JAVA_HOME/lib/tools.jar 
ENV MANPATH $JAVA_HOME/man 
# ============================================================== 

# Install QT Android 
# ============================================================== 
RUN mkdir /var/tmp/qt-android \ 
     && cd /var/tmp/qt-android \ 
     && wget "http://download.qt.io/official_releases/qt/5.5/5.5.0/qt-opensource-linux-x64-android-5.5.0-2.run" \ 
     && chmod 777 qt-opensource-linux-x64-android-5.5.0-2.run 

CMD /var/tmp/qt-android/qt-opensource-linux-x64-android-5.5.0-2.run 

RUN cd /var/tmp/qt-android \ 
     && cd .. \ 
     && rm -rf /var/tmp/qt-android 
# ============================================================== 

# Install Ant 
RUN apt-get install ant -y --force-yes 

# Install SDK 
RUN mkdir /opt/android-sdk \ 
     && cd /opt/android-sdk \ 
     && wget -O - "http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz" \ 
     | tar --strip-components=1 -zxf - 

#Install NDK 
RUN mkdir /var/tmp/ndk \ 
     && cd /var/tmp/ndk \ 
     && wget "http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin" \ 
     && chmod 777 android-ndk-r10e-linux-x86_64.bin 

CMD /var/tmp/ndk/android-ndk-r10e-linux-x86_64.bin 

RUN cd /var/tmp/ndk \ 
     && cd .. \ 
     && rm -rf ndk 

# Run SDK Update 
RUN cd /opt/android-sdk/tools \ 
     && chmod 777 android 

CMD /opt/android-sdk/tools/android update sdk 

# Update libraries 
RUN apt-get update && apt-get upgrade -y --force-yes 

# Install libraries 
RUN apt-get install -y --force-yes libstdc++6 libgcc1 zlib1g libncurses5 
RUN apt-get install -y --force-yes libsdl1.2debian 

# Install Android studio 
# Source: https://github.com/wolfitem/docker/blob/master/Dockerfiles/android-studio/Dockerfile 
RUN apt-get install unzip -y --force-yes 
RUN wget 'https://dl.google.com/dl/android/studio/ide-zips/2.1.0.9/android-studio-ide-143.2790544-linux.zip' -O /tmp/studio.zip && unzip -d /opt /tmp/studio.zip && rm /tmp/studio.zip 


#clean up 
RUN apt-get clean 
RUN apt-get purge 

USER developer 

CMD /opt/android-studio/bin/studio.sh 

我注意到的事情是有很多地方你做類似CMD /var/tmp/qt-android/qt-opensource-linux-x64-android-5.5.0-2.run的地方,它看起來像你想運行/var/tmp/qt-android/qt-opensource-linux-x64-android-5.5.0-2.run。我認爲你可能誤解了CMD的功能 - 它並沒有真正運行該命令,它設置了它,以便當你使用docker run作爲默認命令從映像運行容器時。

如果我不得不重構Dockerfile,我會讓它看起來更像下面的那個。但是目前無法建立,因爲我將它改爲實際上調用上面提到的東西。目前qt-opensource-linux-x64-android-5.5.0-2.run失敗,因爲它找不到要連接的顯示器。

FROM ubuntu:latest 
MAINTAINER Inacio Medeiros <[email protected]> 

# Install the python script required for "add-apt-repository" 
RUN apt-get update \ 
    && apt-get install -y --force-yes \ 
     build-essential \ 
     libgl1-mesa-dev \ 
     python-software-properties \ 
     software-properties-common \ 
     wget \ 
    && apt-get clean \ 
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# Sets language to UTF8 : this works in pretty much all cases 
ENV LANG pt_BR.UTF-8 
RUN locale-gen $LANG 

# INSTALL JAVA 
# ============================================================== 
# Setup the openjdk 8 repo 
RUN add-apt-repository ppa:openjdk-r/ppa 

# Install java8 
RUN apt-get update \ 
    && apt-get install -y --force-yes \ 
     openjdk-8-jdk \ 
    && apt-get clean \ 
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# Setup JAVA_HOME and other environment variables, this is useful for docker commandline 
ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ 
ENV PATH $PATH:$JAVA_HOME/bin 
ENV CLASSPATH $JAVA_HOME/lib/tools.jar 
ENV MANPATH $JAVA_HOME/man 
# ============================================================== 

# Install QT Android 
# ============================================================== 
RUN mkdir -p /var/tmp/qt-android \ 
    && cd /var/tmp/qt-android \ 
    && wget "http://download.qt.io/official_releases/qt/5.5/5.5.0/qt-opensource-linux-x64-android-5.5.0-2.run" \ 
    && chmod 777 qt-opensource-linux-x64-android-5.5.0-2.run \ 
    && /var/tmp/qt-android/qt-opensource-linux-x64-android-5.5.0-2.run \ 
    && cd/\ 
    && rm -rf /var/tmp/qt-android 
# ============================================================== 

# Install Ant 
RUN apt-get update \ 
    && apt-get install -y --force-yes \ 
     ant \ 
    && apt-get clean \ 
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# Install SDK 
RUN mkdir -p /opt/android-sdk \ 
    && cd /opt/android-sdk \ 
    && wget -O - "http://dl.google.com/android/android-sdk_r24.3.4-linux.tgz" \ 
     | tar --strip-components=1 -zxf - 

#Install NDK 
RUN mkdir /var/tmp/ndk \ 
     && cd /var/tmp/ndk \ 
     && wget "http://dl.google.com/android/ndk/android-ndk-r10e-linux-x86_64.bin" \ 
     && chmod 777 android-ndk-r10e-linux-x86_64.bin \ 
     && /var/tmp/ndk/android-ndk-r10e-linux-x86_64.bin \ 
     && cd/\ 
     && rm -rf /var/tmp/ndk 

# Run SDK Update 
RUN cd /opt/android-sdk/tools \ 
    && chmod 777 android \ 
    && /opt/android-sdk/tools/android update sdk 

# Update libraries 
RUN apt-get update \ 
    && apt-get upgrade -y --force-yes \ 
    && apt-get clean \ 
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# Install libraries 
RUN apt-get update \ 
    && apt­-get install -y --force-yes \ 
     libstdc++6 \ 
     libgcc1 \ 
     libsdl1.2debian \ 
     zlib1g \ 
     libncurses5 \ 
    && apt-get clean \ 
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# Install Android studio 
# Source: https://github.com/wolfitem/docker/blob/master/Dockerfiles/android-studio/Dockerfile 
RUN apt-get update \ 
    && apt-get install -y --force-yes \ 
     unzip \ 
    && apt-get clean \ 
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

RUN wget 'https://dl.google.com/dl/android/studio/ide-zips/2.1.0.9/android-studio-ide-143.2790544-linux.zip' -O /tmp/studio.zip \ 
    && unzip -d /opt /tmp/studio.zip \ 
    && rm /tmp/studio.zip 

USER developer 

CMD /opt/android-studio/bin/studio.sh 

讓我知道如果您有任何進一步的問題,我會盡我所能來回答他們。

+0

非常感謝你的回答,joelnb,現在已經向我澄清了。我要測試這些變化並給你一個反饋。 –

+0

在Docker構建期間運行GUI的問題一旦離開本主題的主題問題主題後,我就會打開另一個問題。 –

+0

好的電話。你能否在這裏評論一個鏈接?我可能不知道答案是否足夠,但如果有答案,我會很樂意看到答案。 – joelnb