[英]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
,这样您就可以在没有额外的executables
和libraries
情况下运行它。
或者您可以创建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图像:
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
。
为了能够运行这个 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.