首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在给定的坞-组合容器中执行Python脚本

在给定的坞-组合容器中执行Python脚本
EN

Stack Overflow用户
提问于 2016-12-02 15:39:39
回答 3查看 11.5K关注 0票数 3

我制作了一个小小的python脚本来创建一个DB和RethinkDB中的一些表。

但是现在我正试图在用rethink启动的docker-compose容器中启动这个python脚本。

这是我的docker-compose.yml重新思考容器配置

代码语言:javascript
运行
复制
# Rethink DB
rethink:
  image: rethinkdb:latest
  container_name: rethink
  ports:
    - 58080:8080
    - 58015:28015
    - 59015:29015

我正在尝试在启动容器后执行脚本

代码语言:javascript
运行
复制
docker exec -it rethink python src/app/db-install.py

但我知道这个错误

rpc错误: code =2 desc = oci运行时错误: exec失败: exec:"python":$PATH中找不到可执行文件

在我的容器中找不到Python。这可以在给定容器内使用docker-composedocker exec执行python脚本吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-12-02 15:55:33

rethinkdb映像基于debian:jessie映像:

https://github.com/rethinkdb/rethinkdb-dockerfiles/blob/da98484fc73485fe7780546903d01dcbcd931673/jessie/2.3.5/Dockerfile

debian:jessie映像没有安装python。

因此,您需要创建自己的Dockerfile,如下所示:

代码语言:javascript
运行
复制
FROM rethinkdb:latest
RUN apt-get update && apt-get install -y python

然后改变你的码头-组成:

代码语言:javascript
运行
复制
# Rethink DB
rethink:
  build : .
  container_name: rethink
  ports:
    - 58080:8080
    - 58015:28015
    - 59015:29015

build : .是指向您的Dockerfile的路径。

票数 0
EN

Stack Overflow用户

发布于 2016-12-02 15:49:03

首先,看看在python中是否有container可执行文件。

代码语言:javascript
运行
复制
docker exec -it rethink which python

如果存在,请在前面的步骤中使用which命令提供的which

代码语言:javascript
运行
复制
docker exec -it rethink /absolute/path/to/python src/app/db-install.py

如果没有,您可以将python script转换为bash script,这样您就可以运行它而不需要额外的executableslibraries

或者您可以创建一个dockerfile,使用base image,并安装python

码头文件:

代码语言:javascript
运行
复制
FROM rethinkdb:latest
RUN apt-get update && apt-get install -y python

码头工人撰写文件:

代码语言:javascript
运行
复制
rethink:
  build : .
  container_name: rethink
  ports:
    - 58080:8080
    - 58015:28015
    - 59015:29015
票数 3
EN

Stack Overflow用户

发布于 2022-01-17 23:22:28

码头工

假设安装了python,请尝试:

代码语言:javascript
运行
复制
docker-compose run --rm MY_DOCKER_COMPOSE_SERVICE MY_PYTHON_COMMAND

首先,您可以先进入shell,然后从命令提示符中运行python脚本。

代码语言:javascript
运行
复制
docker-compose run --rm MY_DOCKER_COMPOSE_SERVICE bash

在您的示例中,MY_DOCKER_COMPOSE_SERVICE是“that”,这里不是容器名称,而是服务的名称(第一行rethink:),只有服务是与docker-compose run一起运行的,而不是容器。

MY_PYTHON_COMMAND在Python2的例子中是python src/app/db-install.py,但在Python3中是python -m src/app/db-install (没有".py"),或者,如果安装了Python3和Python2,则是python3 -m src/app/db-install

Dockerfile

为了能够运行这个python命令,Python文件需要在容器中。因此,在您需要使用build: .调用的Dockerfile中,您需要将构建目录复制到您选择的容器中的目录中

代码语言:javascript
运行
复制
COPY $PROJECT_PATH /tmp

这个/tmp将在您的构建目录中创建。如果只编写".",则没有任何子文件夹,并将其直接保存在构建目录中。

当使用/tmp作为子文件夹时,您可以在Dockerfile的末尾编写:

代码语言:javascript
运行
复制
WORKDIR /tmp

码头工

或者,如果您不将WORKDIR从构建(".")上下文更改为/tmp,并且仍然希望到达/tmp,则运行您的/tmp/db-install.py文件。

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

https://stackoverflow.com/questions/40935895

复制
相关文章

相似问题

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