运行dockercompose up时如何将参数传递给docker容器

2024-04-20 02:10:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下Dockerfile:

FROM python:3.6
ADD . /

RUN pip install -r requirements.txt
ENTRYPOINT ["python3.6", "./main.py"]

其中main.py接受使用argparse解析的运行时参数,如下所示:

import argparse
parser = argparse.ArgumentParser()
parser.add_argument('city')
args = parser.parse_args()
print(args.city)

我已成功地从Dockerfile构建了docker映像,并基于此映像运行了一个容器,具体操作如下:

docker run -it my-docker-image "los angeles"

这非常有效,python中的argparse在我的python代码片段中接收参数“los angeles”作为城市

我现在正努力完成与之相当的任务

docker run -it my-docker-image "los angeles"

但是使用docker-compose.yml文件。现在,我的docker-compose.yml文件如下所示:

version: '3'

services:
  data-worker:
    image: url-to-my-docker-container-on-ecr-that-i-have-pulled-onto-my-local-machine
    container_name: run-for-city
    volumes:
      - ~/.aws/:/root/.aws

然后我试着跑:

docker-compose up

它开始了,但没有说:

run-for-city | usage: main.py [-h] city
run-for-city | main.py: error: the following arguments are required: city
run-for-city exited with code 2

这很有道理,因为在运行docker compose时,我需要通过city param,但不知道具体如何操作

我试过:

docker-compose up "los angeles" 

但这并不奏效

我是否需要向docker-compose.yml添加一些内容,或者向docker-compose-up命令添加一个参数,或者什么


Tags: composedockerrunpyimageparsercityfor
1条回答
网友
1楼 · 发布于 2024-04-20 02:10:03

在Docker术语中,您传递的额外参数是“命令”。(在docker run中图像名称之后的任何内容都是命令;通常它是要运行的实际命令,但如果Dockerfile中有一个ENTRYPOINT,它将作为参数传递给入口点。)您可以在docker-compose.yml文件中复制该命令:

version: '3'
services:
  data-worker:
    image: 123456789012.dkr...
    volumes:
      - ~/.aws/:/root/.aws
    command: ["los angeles"]  # < 

如果需要在命令行中传递,唯一真正的方法是通过环境变量Compose will substitute environment variables(注意,语法有点有限),我相信说

command: ["$CITY"]

你会用

CITY="los angeles" docker-compose up

相关问题 更多 >