gpt4 book ai didi

基于ubuntu的docker容器中的python argparse

转载 作者:行者123 更新时间:2023-12-02 19:18:35 29 4
gpt4 key购买 nike

我正在努力寻找一种将参数传递给 docker container 中的 python 脚本的方法。基于ubuntu 。我正在与docker-compose.yml合作.

请查看下面的示例!

docker-compose.yml

version: "3"
services:
bcp:
image: ubuntu:18.04
restart: always
tty: true
entrypoint: ["/bin/bash", "/ingestion/bcp-entrypoint.sh"]
volumes:
- ./services/bcp:/ingestion/services/bcp
- ./bcp-entrypoint.sh:/ingestion/bcp-entrypoint.sh

bcp-entrypoint.sh

apt-get update
apt-get upgrade -y
apt-get clean -y
apt-get install -y python3-pip
...

Python脚本

required_args.add_argument("--database", metavar="str", type=str, help="database from where to extract", required=True)

我在容器和主机上调用脚本的方式是 python3 -m services.bcp --database foo而且效果非常完美。问题是,如何在 docker 容器上的主机上实现相同的功能?

基本上,我正在寻找类似 docker-compose exec services.bcp --database foo 的内容.

我不想使用dockerfile !理想情况下,一切都基于 docker-compose .

最佳答案

这里是 docker 和 docker compose 的解决方案,包括如何解析 docker 容器内的参数:

Python脚本

#!/usr/bin/env python
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("name", help="Name of person to greet")

args = parser.parse_args()

print(f"Hello there, {args.name}!")

使用自定义 dockerfile (对于这种情况似乎是最直接的):

FROM python:3.8

COPY main.py .

ENTRYPOINT ["./main.py"]

然后构建并运行容器化 cli:

# Should make the script executable to invoke directly
$ chmod +x main.py

$ docker build -t dockerized-cli .
$ docker run -it --rm dockerized-cli -h
usage: main.py [-h] name

positional arguments:
name Name of person to greet

optional arguments:
-h, --help show this help message and exit
$ docker run -it --rm dockerized-cli Jeff
Hello there, Jeff!

仅使用 docker-compose (原始问题)

version: "3"
services:
app:
image: python:3.8
volumes:
- .:/opt/app
entrypoint: ["/opt/app/main.py"]

然后运行,

$ docker-compose run app Jeff
Hello there, Jeff!

如果您需要使用 ubuntu:18.04 镜像,但仍然无法使用它构建您自己的镜像(在入口点之外安装 python),那么您需要执行已经执行的操作创建一个入口点脚本,首先安装 python,然后调用脚本。值得注意的是,现在您的入口点是入口点脚本本身,而不是您的 python CLI,因此您需要将 shell 脚本中的任何参数传播到您的 python 脚本。下面是如何执行此操作的简单示例 - 请注意 bash 变量“$@”:

入口点.sh

#!/bin/bash

# install python here...

python print_args.py $@

打印_args.py

import sys
print(sys.argv)

关于基于ubuntu的docker容器中的python argparse,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63356072/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com