我正在尝试设置一个docker容器来管理Android SDK。我希望其他容器能够使用相同的SDK,例如我的Jenkins容器来构建Android项目。
我找到了this图片,它同时安装了Android SDK和Gradle。由于我想重新使用SDK并使其持久化,因此我创建了绑定到主机文件夹的卷。这是我用来启动容器的docker-compose.yml
文件。
version: "2"
services:
androidsdk:
image: thyrlian/android-sdk:latest
restart: always
container_name: androidsdk
volumes:
- /srv/gradle:/opt/gradle
- /srv/android-sdk:/opt/android-sdk
但是,使用docker-compose up
启动图像后,主机上的文件夹和容器中的匹配文件夹都是空的。
如果我在没有主机卷的情况下启动容器,则容器中的文件夹不为空,并包含SDK工具和Gradle。
我预计唯一的区别是,容器中的文件夹是在我的主机上镜像的,当删除容器时我仍然可以继续使用主机上的SDK,如果我将该文件夹链接到我的其他容器(例如詹金斯)。
为什么容器会被打破"与主机卷,我怎样才能让它以我想要的方式工作?
答案 0 :(得分:0)
我发现这张图片都安装了Android SDK和Gradle。由于我想重新使用SDK并使其持久化,因此我创建了绑定到主机文件夹的卷。这是我用来启动容器的docker-compose.yml文件。
SDK已经是此图片的一部分。只要图像存在于主机上,它就是持久的。
通过将本地卷安装到容器中,您实际上正在删除SDK。
答案 1 :(得分:0)
在docker-compose.yml
定义中:
volumes:
- /srv/android-sdk:/opt/android-sdk
我猜主机上的/srv/android-sdk
目录是空的。因此,您应该首先将预先下载的SDK复制到主机' sdk'目录(作为初始化步骤,在project's guide中描述),然后执行docker-compose up
。通过这种方式,非空主机' sdk'目录将被挂载到容器,稍后在容器内执行的SDK的任何更新都将被保留。
请随意在项目存储库中询问或创建问题单。感谢。