首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在EC2上运行时,带有R (rocker/r.base)和python的Docker映像不起作用,但是局部运行很好

在EC2上运行时,带有R (rocker/r.base)和python的Docker映像不起作用,但是局部运行很好
EN

Stack Overflow用户
提问于 2016-11-15 10:27:14
回答 1查看 1.8K关注 0票数 2

我最近开始使用码头。看起来相当令人兴奋,事实是,你可以建立一次应用程序,并在任何机器上运行,听起来很棒!

事实是,我经历了另一件事。我有一个R映像作为基础(rocker/r.base),我想在它上安装python,所以我可以在映像上运行一个烧瓶应用程序,它将公开一个端点,一旦调用,它将运行一个R脚本并记录一些结果。

整件事是一个对接-撰写文件的一部分(在合成上还有3-4个图像,所有的操作都是单独的)。

因此,我设法构建映像,并在本地运行它的码头-撰写。

当我试图将映像部署到AWS EC2实例时,奇怪的事情就开始了。到目前为止,我已经成功地在AWS上运行了其他映像。但是对于这个特定的映像,构建失败是因为我得到了一些库依赖错误,并且在修复之后,执行失败了。为了深入了解更多细节:

  • 最初,我在构建AWS时得到了AWS上的依赖错误(本地没有这样的错误)。因此,为了克服这一点,我修改了我的Dockerfile,以便它单独安装这些依赖项。这起作用了!我的形象终于建立起来了。但随后:
  • 我设法让这个web应用程序暴露在一个端点上。然后我尝试调用R脚本,我发现系统找不到Rscript命令(我明确地将它定义为/usr/bin/Rscript,它在本地工作得很好--我使用python的subprocess.call运行R脚本)。

所以Rscript似乎没有安装在我的AWS容器上!这可能是因为我已经使用过的手动安装--allow-downgrades,因此将安装适当的版本。我怀疑这些降级可能会删除一些库?

不管怎么说,我不知道到底出了什么问题。对我来说听起来很可怕。我想,一旦你在本地运行了一些东西,那么你就可以在任何地方使用码头运行它,但似乎要么不是这样,要么是我错过了一些非常糟糕的东西。

顺便说一下,我的本地an产品(AWS)服务器使用了相同版本的docker (1.12.3,build 6b644ec)和docker-组合(版本1.7.0,build 0d7bf73),而且我已经为这两台机器启用了i386体系结构(以防出现问题,两者实际上都在使用amd64)。

我不确定我是否希望从这篇文章中得到一些答案,到目前为止,我还没有在谷歌上找到类似的情况,但是如果以前有人遇到过这样的情况,请畅所欲言!:)

干杯,宝贝

更新

你绝对是对的,亚龙。我附上一些更多的信息。首先,对接者-复合者. the:

代码语言:javascript
复制
version: '2'
services:
  recommend.service:    # This service is fine both locally and on AWS
    build:
      context: .
      dockerfile: ./docker/recommend.service.Dockerfile
    ports:
     - "8081:8081"
    restart: always
    env_file: .env
  cltv.service:     # This is the service that has problems to be built and run on AWS. Locally is fine
    build:
      context: .
      dockerfile: ./docker/cltv.service.Dockerfile
    ports:
     - "8082:8082"
    restart: always
    env_file: .env
  rabbit:       # Works everywhere
    image: rabbitmq
    hostname: smart.rabbitmq
    restart: always
    volumes:
      - rabbit.data:/var/lib/rabbitmq
  celery:       # Works everywhere
    build:
      context: .
      dockerfile: ./docker/smart.celery.Dockerfile
    depends_on:
     - rabbit
    restart: always
    env_file: .env
volumes:
  rabbit.data:
    driver: local

以及./docker/cltv.service.Dockerfile:

代码语言:javascript
复制
## Adapted from zamora/r-devtools
## Start with the official rocker image (lightweight Debian)
FROM rocker/r-base:latest

MAINTAINER Babis <cparavalos@gmail.com>

ENV DEBIAN_FRONTEND noninteractive

RUN mkdir -p /usr/src/cltv_app
WORKDIR      /usr/src/cltv_app

COPY requirements.txt           /usr/src/cltv_app/requirements.txt
COPY requirements-cltv.txt      /usr/src/cltv_app/requirements-cltv.txt
COPY cltv/                      /usr/src/cltv_app/cltv/
COPY services/                  /usr/src/cltv_app/services/

# Install external dependencies
RUN apt-get update -qq \
 && apt-get install -y --no-install-recommends --allow-downgrades \
 libcurl3=7.50.1-1 \        # I added that because of dependencies issue while building in the server. Locally I didn't need it
 libcurl4-openssl-dev \
 libssl-dev \
 libsqlite3-dev \
 libxml2-dev \
 qpdf \
 vim \
 libgsl-dev \
 && apt-get clean \
 && rm -rf /var/lib/apt/lists/ \
 && rm -rf /tmp/downloaded_packages/ /tmp/*.rds

# Install devtools and testthat
RUN install2.r --error \
    devtools \
    testthat \
    gsl

# Install some required libraries
RUN Rscript -e 'devtools::install_github("mplatzer/BTYDplus", dependencies=TRUE)'

## Note: I had added the below in order to get a succesful build because of the dependencies errors. In my local, the image is built and run without these!!!
#RUN apt-get update
#RUN apt-get install -y --allow-downgrades libkrb5support0=1.14.3+dfsg-2
#RUN apt-get install -y libkrb5-3=1.14.3+dfsg-2
#RUN apt-get install -y libk5crypto3=1.14.3+dfsg-2
#RUN apt-get install -y libgssapi-krb5-2=1.14.3+dfsg-2
#RUN apt-get update
#RUN apt-get install -y krb5-multidev

# Install python and postgres required packages
RUN apt-get update
RUN apt-get install -y python3.4 python3-dev libpq-dev python-pip

RUN pip install --no-cache-dir -r requirements.txt
RUN pip install --no-cache-dir -r requirements-cltv.txt
RUN pip install -e cltv/.

EXPOSE 8082

# Set a big timeout
CMD ["/usr/local/bin/gunicorn", "--log-config", "cltv/logging.conf",  "cltv.wsgi:app", "--bind", "0.0.0.0:8082", "--timeout", "86400"]

我触发了整个过程:

代码语言:javascript
复制
docker-compose up --build -d

谢谢,如果你需要在设置上看到其他的东西,请建议!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-29 13:25:33

原因是r.base与一些python包有冲突,不能在这个R映像中使用python。

最后,我得到了一个解决方案,里面的对接者形象,以ubuntu为基础。我在ubuntu映像中安装了所需的python库,并在其上安装了docker,在这个映像中,我使用了docker来构建这个r.base映像。然后我使用了从ubuntu容器内部运行的docker,并设法完成了我的工作:)

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40607454

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档