我是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!
答案 0 :(得分:2)
当您在docker-compose服务中同时拥有image
和build
时,优先级将赋予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