docker-compose行为不符合dockerfiles

时间:2019-02-11 16:14:42

标签: r docker docker-compose dockerfile

我是0级Docker用户,所以请紧紧抓住我:

我正在尝试使用docker-compose创建一个共享容器环境。 docker-compose.yaml看起来像这样:

# docker-compose.yml

#ubuntu(16.04) + python(3)
version: '3'
services:
 ubuntu:
   image: 434c03a615a2
   build:
     context: .
     dockerfile: dockerfileBase   
   volumes:
     - "./data/data_vol/:/app"
   tty: true

#tensorflow
 tensorflow:
   image: tensorflow/tensorflow
   build:
     context: .
     dockerfile: dockerfileTensorflow
   ports:
     - "8888:8888"
   tty: true

#rstudio
 rstudio:
   image: rocker/rstudio
   build:
     context: .
     dockerfile: dockerfileRstudio1   
   environment:
     - PASSWORD=supersecret
   ports:
     - "8787:8787"
   tty: true

据我所知,一切正常,但是导入Rstudio的dockerfile似乎在.yaml内部执行的方式与在其外部执行的方式不同。我的意思是这个Rstudio dockerfile:

#pull rstudio
FROM rocker/rstudio:3.4.3
LABEL maintainer="Landsense"

#set Env variables 
ENV http_proxy=http://##.###.###.##:####
ENV https_proxy=http://##.###.###.##:####
ENV ftp_proxy=http://##.###.###.##:####
ENV TZ="Europe/Rome"

RUN apt-get update && \
  apt-get install -y \
  libgdal-dev \
  libproj-dev \
  libv8-dev \
  ssh && \
  apt-get clean all

RUN Rscript -e "install.packages('raster')"

自行构建时会安装软件包,但从docker-compose.yaml运行时无法这样做。有人可以评论这种行为吗? RSPKT!

1 个答案:

答案 0 :(得分:2)

当您在docker-compose服务中同时拥有imagebuild时,优先级将赋予image。在您的方案中,由于您的撰写文件中有image: rocker/rstudio,因此它将从docker-hub中提取rocker/rstudio:latest图像。但是,您想要的是在rocker/rstudio映像之上构建映像(在Dockerfile中,它已用作基础映像)。

将图像与docker-hub中的现有标签标记在一起不是一个好习惯(您可能会遇到困难,因为您在此处遇到的错误图像被缓存在本地docker图像中)。首先确定您是否真的要为图像命名(否则compose会为您标记图像,其中标记包含服务名称的一部分,以便您轻松识别)。如果要按以下方式使用它,并在image标签中添加前缀。其他两项服​​务也是如此。

image: localhost/rocker/rstudio
build:
     context: .
     dockerfile: dockerfileRstudio1