使用docker run

时间:2015-10-27 17:18:51

标签: android docker

我正在尝试在Docker容器中构建一个Android应用程序,但是在调用docker run时我无法设置环境变量。我在DockerFile处创建了ci/Dockerfile,其外观如下:

FROM centos
MAINTAINER Jonathan Maltz <my@email.com>

# Install Development Tools
RUN yum -y groupinstall "Development Tools"

# yum update
RUN yum -y update

# Install java (OpenJDK)
RUN yum -y install java-1.7.0-openjdk-devel

# Install 32bit Library
RUN yum -y install glibc.i686
RUN yum -y install libstdc++.i686
RUN yum -y install glibc-devel.i686
RUN yum -y install zlib-devel.i686
RUN yum -y install ncurses-devel.i686
RUN yum -y install libX11-devel.i686
RUN yum -y install libXrender.i686

# Install Android SDK
RUN cd /usr/local/ && curl -L -O http://dl.google.com/android/android-sdk_r24.4.1-linux.tgz && tar xf android-sdk_r24.4.1-linux.tgz

# Environment variables
ENV ANDROID_HOME /usr/local/android-sdk-linux
ENV PATH $PATH:$ANDROID_HOME/tools
ENV PATH $PATH:$ANDROID_HOME/platform-tools

# Install Android tools
RUN android list sdk --all
RUN echo y | android update sdk --filter tool --no-ui --force -a
RUN echo y | android update sdk --filter platform-tool --no-ui --force -a
RUN echo y | android update sdk --filter platform --no-ui --force -a
RUN echo y | android update sdk --filter extra --no-ui --force -a

# Clean up
RUN rm -rf /usr/local/android-sdk_r24.4.1-linux.tgz
RUN yum clean all

WORKDIR /mounted/volume
CMD ./gradlew assembleDebug

然后,在一个makefile中,我有一个名为test的目标,它只是:

docker build -t my/container ci
docker run -v $(shell pwd):/mounted/volume my/container

当我运行make test时,容器已正确配置,但运行gradlew assembleDebug时,我收到错误消息“SDK目录'/ Users / maltz / android-sdk'不存在。 “这很令人困惑,因为这是我本地安装android SDK的路径,而不是我在ANDROID_HOME中配置的Dockerfile

所以,我的问题是:为什么docker run不尊重我在ANDROID_HOME中设置的DockerFile值?并且,作为后续工作,我应该如何配置Dockerfile / Makefile,以便我的命令引用容器中正确的环境变量。

1 个答案:

答案 0 :(得分:0)

安装到容器中的项目$(shell pwd):/mounted/volume文件夹包含local.properties文件,该文件将覆盖环境变量。它包含这样的内容

## This file is automatically generated by Android Studio.
# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
#
# This file must *NOT* be checked into Version Control Systems,
# as it contains information specific to your local configuration.
#
# Location of the SDK. This is only used by Gradle.
# For customization when using a Version Control System, please read the
# header note.
#Tue Mar 28 17:07:37 CEST 2017
sdk.dir=/Users/maltz/android-sdk

您必须先将其删除。