【问题标题】:Using docker entrypoint and files outside docker在 docker 外部使用 docker 入口点和文件
【发布时间】:2019-07-10 14:02:03
【问题描述】:

我正在编写一个 python 脚本来创建 AWS CloudFormation 更改集以简化执行我想将此脚本添加到 Docker 映像并将其作为入口点运行。

为此,我必须阅读 CFs 模板文件和参数文件,它们都是 json 格式。 当我在本地 shell 环境中执行脚本时,一切都按预期工作。

当我运行 docker 容器并指定文件时。脚本说它找不到文件。

现在我的问题是如何使容器能够访问这些文件?

docker pull cf-create-change-set:latest
docker run cf-create-change-set:latest --template-body ./template.json --cli-input-json ./parameters.json

Traceback (most recent call last):
  File "/app/cf-create-change-set.py", line 266, in <module>
    with open(CLI_INPUT_JSON, 'r') as f:
FileNotFoundError: [Errno 2] No such file or directory: './template.json'

这是我的 dockerfile:

FROM AWS_ACCOUNT_ID.dkr.ecr.AWS_REGION.amazonaws.com/cicd/docker-base-image:iat

WORKDIR /app

# Copy app data
COPY app/requirements.txt .
COPY app/cf-create-change-set.py .

RUN pip3 install --no-cache-dir -r /app/requirements.txt

ENTRYPOINT [ "/app/cf-create-change-set.py" ]

【问题讨论】:

    标签: python docker dockerfile


    【解决方案1】:

    错误的原因是文件不存在于容器中,而它存在于您的文件系统中。至少有两种可能的解决方案。

    您可以在构建阶段将文件ADD 放入容器中(构建您自己的 Dockerfile)或将本地目录映射到容器内的目录:

    docker run -v ./templates:/templates image:tag --template-body /templates/template.json
    

    这样,当您运行容器时,它在/templates/template.json 的文件将与您本地templates 文件夹的内容相同。阅读有关bind mounts 的更多信息。

    【讨论】:

    • 你好@YuryFedorov 是的,这是可能的,我知道这个功能。问题在于,每次我想使用我的 cmdline 功能时,我都必须输入很多行。您还有其他建议吗?也许从 STDIN 或类似的东西中读取?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2013-09-19
    相关资源
    最近更新 更多