繁体   English   中英

运行 docker-compose 时如何将参数传递给 docker 容器

[英]How to pass argument to docker container when running docker-compose up

我有以下 Dockerfile:

FROM python:3.6
ADD . /

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

main.py 在运行时使用 argparse 解析的 arguments ,如下所示:

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 时需要通过城市参数,但不知道具体如何。

我试过了:

docker-compose up "los angeles" 

但这没有用。

我是否需要在我的 docker-compose.yml 和/或 docker-compose up 命令的参数中添加一些内容或什么?

在 Docker 术语中,您传递的额外参数是“命令”。 (Anything after the image name in docker run is the command; conventionally it's an actual command to run, but if you have an ENTRYPOINT in your Dockerfile, it's passed as arguments to the entrypoint.) You can replicate this in your docker-compose.yml file :

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

如果您需要在命令行中传递它,唯一真正的方法是通过环境变量。 Compose 将替换环境变量(注意,语法有些限制),我相信它会说

command: ["$CITY"]

你会用

CITY="los angeles" docker-compose up

暂无
暂无

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

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