在Docker外部使用Docker入口点和文件

时间:2019-07-10 14:02:03

标签: python docker dockerfile

我正在编写一个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" ]

1 个答案:

答案 0 :(得分:0)

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

您可以在构建阶段将ADD文件docker run -v ./templates:/templates image:tag --template-body /templates/template.json 放入容器(构建自己的Dockerfile)或将本地目录映射到容器内的目录:

/templates/template.json

这样,当您运行容器时,它与本地templates文件夹的内容位于import os from tensorflow.python.keras import models import UNet3Deep as UNet working_dir = os.path.join('C:', os.sep, 'Users', 'Peteris.Zvejnieks', 'Data') model_path = os.path.join(working_dir, 'tmp', 'real_deal.hdf5') img_shape = (512, 512, 1) model = UNet.gib_model(img_shape) models.load_model(model_path) 的文件相同。进一步了解bind mounts