Android 使用Docker run时,Docker ENV命令不再有效

Android 使用Docker run时,Docker ENV命令不再有效,android,docker,Android,Docker,我试图在Docker容器中构建Android应用程序,但在调用Docker run时设置环境变量时遇到问题。我在ci/DockerFile上创建了一个DockerFile,它看起来像: FROM centos MAINTAINER Jonathan Maltz <my@email.com> # Install Development Tools RUN yum -y groupinstall "Development Tools" # yum update RUN yum -y

我试图在Docker容器中构建Android应用程序,但在调用
Docker run
时设置环境变量时遇到问题。我在
ci/DockerFile
上创建了一个
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
当我运行
make test
时,容器已正确配置,但当运行
gradlew assembleDebug
时,我会收到错误消息“SDK目录'/Users/maltz/android SDK'不存在”。这令人困惑,因为这是我本地android SDK安装的路径,不是我在
Dockerfile
中配置的
ANDROID\u HOME

所以,我的问题是:
docker为什么不运行
尊重我在
DockerFile
中设置的
ANDROID\u HOME
值?接下来,我应该如何配置我的
Dockerfile
/
Makefile
,以便我的命令引用容器中正确的环境变量。

您的项目
$(shell pwd):/mounted/volume
装入容器的文件夹包含覆盖环境变量的
本地.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

您必须先删除它。

当您运行
docker run-v$(shell pwd)时会发生什么:/mounted/volume my/container env
您能看到ANDROID_HOME的值吗?如果
gradlew
是一个脚本,您可以发布它或添加代码链接吗?
gradlew
是向gradle添加包装任务时出现的gradle包装。它下载您在
gradle.properties
中指定的gradle版本。这个错误发生在Gradle的android插件上,它希望有一些方法来引用您的android SDK。至于
docker run
命令。如果我在
Dockerfile
中指定
/gradlew assembleDebug
,则环境变量的处理是正确的。但是,当我没有指定它们时,这些环境变量是空的。
## 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