繁体   English   中英

在给定的 docker-compose 容器中执行 Python 脚本

[英]Execute Python script inside a given docker-compose container

我制作了一个小 Python 脚本来在 RethinkDB 中创建一个数据库和一些表

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

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

# Rethink DB
rethink:
  image: rethinkdb:latest
  container_name: rethink
  ports:
    - 58080:8080
    - 58015:28015
    - 59015:29015

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

docker exec -it rethink python src/app/db-install.py

但我得到这个错误

rpc 错误:代码 = 2 desc = oci 运行时错误:执行失败:执行:“python”:$PATH 中找不到可执行文件

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

首先找出container是否有python可执行文件:

docker exec -it rethink which python

如果存在,请使用上一步中由which命令提供的absolute path

docker exec -it rethink /absolute/path/to/python src/app/db-install.py

如果没有,您可以将python script转换为bash script ,这样您就可以在没有额外的executableslibraries情况下运行它。

或者您可以创建dockerfile ,使用base image ,然后安装python

dockerfile:

FROM rethinkdb:latest
RUN apt-get update && apt-get install -y python

Docker撰写文件:

rethink:
  build : .
  container_name: rethink
  ports:
    - 58080:8080
    - 58015:28015
    - 59015:29015

rethinkdb图像基于debian:jessie图像:

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

debian:jessie图像没有安装python。

所以你需要创建自己的Dockerfile,例如:

FROM rethinkdb:latest
RUN apt-get update && apt-get install -y python

然后改变您的docker-compose:

# Rethink DB
rethink:
  build : .
  container_name: rethink
  ports:
    - 58080:8080
    - 58015:28015
    - 59015:29015

build : . 是Dockerfile的路径。

码头工人组成

假设已安装 python,请尝试:

docker-compose run --rm MY_DOCKER_COMPOSE_SERVICE MY_PYTHON_COMMAND

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

docker-compose run --rm MY_DOCKER_COMPOSE_SERVICE bash

在您的情况下, MY_DOCKER_COMPOSE_SERVICE 是“重新思考”,这不是这里的容器名称,而是服务的名称(第一行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: . ,您需要将构建目录复制到您选择的容器中的目录

COPY $PROJECT_PATH /tmp

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

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

WORKDIR /tmp

码头工人组成

或者,如果您没有将构建(“ . ”)上下文中的WORKDIR更改为/tmp并且您仍想访问/tmp ,请运行您的 Python 文件,例如/tmp/db-install.py

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM