我正在构建一个使用 docker 的 webapp(一个简单的 Flask 站点)。我希望我的开发代码不驻留在 docker 中,而是由我在 dockerfile 中定义的开发环境(使用 python3)执行。我知道我可以在 dockerfile 中使用 COPY . .
语法将源代码复制到镜像中以供执行,但这违反了我将容器与源代码分离的目标。有没有办法让 docker 容器读取并执行我运行 docker container run
命令的目录中的代码?
现在我的容器使用复制公司将所有源代码复制到容器中。然后它使用 CMD
命令自动运行 Flask 应用程序:
CMD [ "python", "flask_app/server.py" ]
(我将所有 flask 代码存储在名为 flask_app
的目录中)。我假设这是有效的,因为所有这些都已复制到容器中(根据 dockerfile 中给出的规范),并且在我运行容器时正在执行。我希望容器能够访问并执行 flask_app/server.py
,而不将此信息复制到自身中 - 这可能吗?如果是这样,怎么办?
最佳答案
而不是使用 COPY
要将代码移动到容器中,您将使用“绑定(bind)安装”( https://docs.docker.com/storage/bind-mounts/ )。
当您运行容器时,您将使用如下命令来执行此操作:
docker run --mount type=bind,source=<path_outside_container>,target=<path_inside_container> <image_tag>
为了可移植性,我建议将此行放入要从存储库根运行的脚本中,并具有 <path_outside_container>
是"$(pwd)"
,以便它可以在其他人的计算机上运行。您需要调整<path_inside_container>
和你的CMD
取决于您希望代码在容器内的位置。
(显然,您还可以在命令中添加您想要的任何其他选项,例如 --it --rm
或 -p <whatever>
。)
关于python - 将 dockerfile 从目录配置为 'read'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58681168/