【问题标题】:Execute Python script inside a given docker-compose container在给定的 docker-compose 容器中执行 Python 脚本
【发布时间】:2017-04-17 13:57:52
【问题描述】:

我已经制作了一个小 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 错误:code = 2 desc = oci 运行时错误:exec failed: exec: "python": executable file not found in $PATH

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

【问题讨论】:

  • 让你的 python 脚本连接到你的数据库不是更有意义吗?

标签: python docker docker-compose


【解决方案1】:

首先确定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

码头文件:

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

【讨论】:

    【解决方案2】:

    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 的路径。

    【讨论】:

      【解决方案3】:

      Docker-compose

      假设安装了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:),并且只是 em> 服务使用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 中,您需要将构建目录复制到您选择的容器中的目录中

      COPY $PROJECT_PATH /tmp
      

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

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

      WORKDIR /tmp
      

      Docker-compose

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

      【讨论】:

        猜你喜欢
        • 2020-01-27
        • 1970-01-01
        • 2021-05-17
        • 1970-01-01
        • 2018-05-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多