首页 > 解决方案 > Docker compose - R 服务器 - 致命错误:您必须指定“--save”、“--no-save”或“--vanilla”

问题描述

我在使用 docker-compose 时遇到问题。我是 docker 的新手。

我可以成功构建我的 R 服务器。这是 Dockerfile:

FROM ubuntu:16.04

RUN apt-key adv --keyserver keyserver.ubuntu.com --recv-keys E084DAB9
RUN echo "deb http://cran.r-project.org/bin/linux/ubuntu trusty/" |  tee -a /etc/apt/sources.list
RUN apt-get update
RUN apt-get install -y build-essential
RUN apt-get install -y curl libcurl4-openssl-dev
RUN apt-get install -y apt-utils

RUN apt-get install -y r-base
RUN apt-get install -y r-base-dev
RUN apt-get install -y libssl-dev

ENTRYPOINT ["/usr/bin/R"]

这是我的 docker compose 文件,它有一个需要调用 R 的 python 工作服务器:

version: '3'
services:
  worker:
    build: .
    image: mtm/mtm-worker-server
  r-server:
    image: "mtm/mtm-rserver"

这是错误:

docker-compose up
Recreating compose-mtm-worker_r-server_1 ... done
Starting compose-mtm-worker_worker_1     ... done
Attaching to compose-mtm-worker_r-server_1, compose-mtm-worker_worker_1
r-server_1  | Fatal error: you must specify '--save', '--no-save' or '--vanilla'
compose-mtm-worker_r-server_1 exited with code 2

我不知道为什么会收到此错误:

Fatal error: you must specify '--save', '--no-save' or '--vanilla'

附言

我将此添加到我的 dockerfile 中,并得到以下信息:

ENTRYPOINT ["sh", "-c"]

为什么会有所作为?

Recreating compose-mtm-worker_r-server_1 ... done
Starting compose-mtm-worker_worker_1     ... done
Attaching to compose-mtm-worker_worker_1, compose-mtm-worker_r-server_1
r-server_1  | sh: 0: -c requires an argument
compose-mtm-worker_r-server_1 exited with code 2

标签: rdockerdocker-composedockerfile

解决方案


致命错误:您必须指定“--save”、“--no-save”或“--vanilla”

是当 R 检测到它以非交互方式运行时出现的错误。如果消息有效,您可以选择其中一个选项。

有时这是不恰当地触发的。在这些情况下,您只需使用该--ess选项。

ENTRYPOINT 这里有一个讨论的 SO 线程。看起来它有助于配置容器,我猜你是在告诉它使用shshell,也许 R 可以识别它正在与之交互的任何默认(Docker?)shell。我有点猜测最后一部分(关于ENTRYPOINT),我也不太了解 Docker,但考虑到您遇到的错误消息,它确实有道理。


推荐阅读