我有以下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"
这很好用,在argparse中,python在我的python代码段中将参数“洛杉矶”作为城市。
我现在正在尝试完成
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命令中添加一个参数,还是什么?
答案 0 :(得分:0)
在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