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