Docker compose - R 服务器 - 致命错误:必须指定“--save”、“--no-save”或“--vanilla”

Tam*_*mpa 5 r docker dockerfile docker-compose

我遇到了 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"]
Run Code Online (Sandbox Code Playgroud)

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

version: '3'
services:
  worker:
    build: .
    image: mtm/mtm-worker-server
  r-server:
    image: "mtm/mtm-rserver"
Run Code Online (Sandbox Code Playgroud)

这是错误:

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
Run Code Online (Sandbox Code Playgroud)

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

Fatal error: you must specify '--save', '--no-save' or '--vanilla'
Run Code Online (Sandbox Code Playgroud)

聚苯乙烯

我将其添加到我的 dockerfile 中,得到以下内容:

ENTRYPOINT ["sh", "-c"]
Run Code Online (Sandbox Code Playgroud)

为什么这会产生影响?

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
Run Code Online (Sandbox Code Playgroud)

Hac*_*k-R 5

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

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

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

ENTRYPOINT 这里有一个讨论的主题。看起来它有助于配置容器,我猜你是在告诉它使用 shell sh,R 可能会通过它与之交互的任何默认(Docker?) shell 来识别它。我对最后一部分(关于ENTRYPOINT)进行了猜测,我也不太了解 Docker,但考虑到您遇到的错误消息,它确实有意义。