0

我有一个多容器应用程序,使用 nginx 作为 Web 服务器和反向代理,以及一个简单的“Hello World” Streamlit 应用程序。
它在我的 Gitlab上可用。

我对 DevOps 完全陌生,因此想利用Gitlab 的 Auto DevOps来简化它。
默认情况下,Gitlab 的 Auto DevOps 只需要一个 Dockerfile,并且在项目的根目录(源)
令人惊讶的是,我只在我的多容器用例中找到了一个资源,旨在回答这个问题:https://forum.gitlab。 com/t/auto-build-for-multiple-docker-containers/46949
我听从了建议,只.gitlab-ci.yml对 dockerfiles 的路径进行了细微的更改。

但后来我遇到了 Dockerfiles 无法识别其文件夹中的文件的问题:App 的 Dockerfile 找不到requirements.txt在此处输入图像描述

并且 Nginx 的 Dockerfile 没有找到project.conf 在此处输入图像描述

似乎该DOCKERFILE_PATH: src/nginx/Dockerfile变量本身仅提供对 Dockerfile 的访问权限,但不将此路径理解为构建的位置。
如何自定义它.gitlab-ci.yml以使构建正确通过?
非常感谢 !

4

1 回答 1

1

找不到文件的原因是由于 docker 的上下文是如何工作的。由于您从根目录运行 docker build,因此您的上下文将在根目录中,而不是从 dockerfile 的路径中。这意味着您的 docker build 命令正在尝试查找/requirements.txt而不是src/app/requirements.txt. 您可以通过在运行 docker build 之前执行 acd更改到您的目录并从 docker build 中删除标志(因为您不再需要指定文件夹)来相对轻松地解决此问题。/src/app-f

由于每个作业都在一个隔离的容器中执行,因此您无需担心 CD 回到您的构建根目录,因为您的作业从不运行任何其他非 docker 命令。

于 2021-11-28T03:47:33.570 回答