我有以下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接收到param"洛杉矶";作为我的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-compase-up命令中添加一个参数吗?
在Docker术语中,您传递的额外参数是一个"命令";。(docker run
中图像名称之后的任何内容都是命令;按照惯例,这是一个要运行的实际命令,但如果Dockerfile中有一个ENTRYPOINT
,它会作为参数传递给入口点。(您可以在docker-compose.yml
文件中复制这一点:
version: '3'
services:
data-worker:
image: 123456789012.dkr...
volumes:
- ~/.aws/:/root/.aws
command: ["los angeles"] # <--
如果需要在命令行中传递,唯一真正的方法是通过环境变量。Compose将替换环境变量(注意,语法有些有限(,我相信会起作用
command: ["$CITY"]
你会用启动这个
CITY="los angeles" docker-compose up