Docker + R: почему метод «сохранить» не работает?

У меня есть файл докера:

FROM rocker/verse:latest
RUN apt-get update 
RUN R -e "install.packages('TraMineR', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('ggthemes', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('ggplot2', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('Rcpp'            , repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('data.table', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('randomForest', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('pROC'            , repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('stringr', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('ggplot2', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('ggthemes', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('TraMineR', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('bipartite', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('tm'            , repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('dummies', repos = 'http://cran.us.r-project.org')"
RUN R -e "install.packages('xgboost', repos = 'http://cran.us.r-project.org')"

RUN R -e "install.packages('SnowballC', repos = 'http://cran.us.r-project.org')"

Я строю его, запускаю и получаю контейнер. В этом контейнере я запускаю R-файл и пытаюсь сохранить объект:

NdelivIDexcessif<-15 ; 
save(NdelivIDexcessif, file = "sauvegardeTest.rda")

И это не создает никакого вывода, поскольку я ожидал, что в текущем каталоге будет создан «sauvegardeTest.rda».

Что мне не хватает?

Тома Docker намеренно отбрасываются, поэтому, чтобы знать, «если» и «как» данные, созданные внутри контейнера, могут быть сохранены вне контейнера, нам нужно увидеть команду docker run .... А затем, вероятно, перенесите его на Суперпользователь, поскольку я думаю, что это касается системного администратора, а не программирования.

r2evans 27.09.2018 01:56

Ромен, удачи в решении твоей проблемы?

r2evans 06.10.2018 20:32

да, извините, моя вина: у меня возникла проблема с настройкой моих томов (время от времени мы слепые)

Romain Jouin 08.10.2018 23:25

Я полностью понимаю ... Я пытаюсь перенести оркестраторы с docker-compose на kubectl и часто сталкиваюсь с проблемами с томами или сетями ...

r2evans 09.10.2018 07:13
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
4
43
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это может быть одна из нескольких возможных вещей, две главные (на мой взгляд):

  1. Docker по умолчанию уничтожает среду (например, изменения файловой системы) при остановке контейнера. Это может быть преимуществом для безопасности, чистоты кода и т. д., Но для этого требуется, чтобы, если у вас должна быть сохраняемость на уровне файлов после создания контейнера, вы должны явно настроить его.

    Ни с чем файл не найден.

    root@myhost:/tmp/ltest# ll
    total 76
    drwxr-xr-x  2 root root  4096 Sep 26 19:08 ./
    drwxrwxrwt 35 root root 69632 Sep 26 19:08 ../
    
    
    root@myhost:/tmp/ltest# docker run \
      --rm -it rocker/tidyverse:3.3.3 \
      R -e "save(mtcars, file='mt.rda')"
    
    R version 3.3.3 (2017-03-06) -- "Another Canoe"
    Copyright (C) 2017 The R Foundation for Statistical Computing
    Platform: x86_64-pc-linux-gnu (64-bit)
    
    R is free software and comes with ABSOLUTELY NO WARRANTY.
    You are welcome to redistribute it under certain conditions.
    Type 'license()' or 'licence()' for distribution details.
    
    R is a collaborative project with many contributors.
    Type 'contributors()' for more information and
    'citation()' on how to cite R or R packages in publications.
    
    Type 'demo()' for some demos, 'help()' for on-line help, or
    'help.start()' for an HTML browser interface to help.
    Type 'q()' to quit R.
    
    > save(mtcars, file='mt.rda')
    >
    >
    
    root@myhost:/tmp/ltest# ll
    total 76
    drwxr-xr-x  2 root root  4096 Sep 26 19:08 ./
    drwxrwxrwt 35 root root 69632 Sep 26 19:08 ../
    

    Однако, если вы явно установите том или точку монтирования (https://docs.docker.com/storage/volumes/#choose-the--v-or---mount-flag), стойкость может быть достигнута.

    root@myhost:/tmp/ltest# docker run \
      -v /tmp/ltest:/tmp/rtest/ \
      --rm -it rocker/tidyverse:3.3.3 \
      R -e "save(mtcars, file='/tmp/rtest/mt.rda')"
    
    R version 3.3.3 (2017-03-06) -- "Another Canoe"
    Copyright (C) 2017 The R Foundation for Statistical Computing
    Platform: x86_64-pc-linux-gnu (64-bit)
    
    R is free software and comes with ABSOLUTELY NO WARRANTY.
    You are welcome to redistribute it under certain conditions.
    Type 'license()' or 'licence()' for distribution details.
    
    R is a collaborative project with many contributors.
    Type 'contributors()' for more information and
    'citation()' on how to cite R or R packages in publications.
    
    Type 'demo()' for some demos, 'help()' for on-line help, or
    'help.start()' for an HTML browser interface to help.
    Type 'q()' to quit R.
    
    > save(mtcars, file='/tmp/rtest/mt.rda')
    >
    >
    
    root@franz:/tmp/ltest# ls -l
    total 4
    -rw-r--r-- 1 root root 1234 Sep 26 19:04 mt.rda
    
  2. Если вы уже монтируете его с помощью какого-либо механизма, убедитесь, что вы установили путь в команде save или предварительно установили рабочий каталог процесса R:

    docker run \
      -v /tmp/rtest:/tmp/rtest/ \
      -w /tmp/rtest/ --rm -it \
      rocker/tidyverse:3.3.3 R -e "save(mtcars, file='mt.rda')"
    docker run \
      -v /tmp/rtest:/tmp/rtest/ \
      --rm -ti \
      rocker/tidyverse:3.3.3 R -e "save(mtcars, file='/tmp/rtest/mt.rda')"
    

Обратите внимание, что расположение каталога снаружи и внутри контейнера уникально; хотя вы можете сделать их такими же, в этом нет необходимости. В этом примере каталог настоящий вне контейнера - /tmp/ltest/, а имя внутреннего каталога - /tmp/rtest/.

Другие вопросы по теме