为什么我的卷在将其绑定到主机文件夹时为空?

时间:2017-05-03 08:56:00

标签: android docker docker-compose

我正在尝试设置一个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,如果我将该文件夹链接到我的其他容器(例如詹金斯)。

为什么容器会被打破"与主机卷,我怎样才能让它以我想要的方式工作?

2 个答案:

答案 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的任何更新都将被保留。

请随意在项目存储库中询问或创建问题单。感谢。