我正在尝试在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
,以便我的命令引用容器中正确的环境变量。
答案 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
您必须先将其删除。