我当前的项目结构如下:
/home/some/project
│ .credentials_dev
│ .credentials_prod
│ ca.cer
│ docker-compose.yml
│ Dockerfile
│ init.sql
│ nginx_dev.conf
│ nginx_prod.conf
│
├───src
└───users
Compose制作了四个容器,其中两个是dev&prod版本的应用程序,谁使用适当的prod&dev文件。正如您所看到的,以下结构根几乎没有过载,所以我想将所有部署人员转移到单独的目录中,以生成以下内容:
/home/some/project
├───deployment
│ .credentials_dev
│ .credentials_prod
│ ca.cer
│ docker-compose.yml
│ Dockerfile
│ init.sql
│ nginx_dev.conf
│ nginx_prod.conf
│
├───src
└───users
想法是在docker主机上接收以下结构的结果:
host
├───dev
│ ├───src
│ └───users
├───prod
│ ├───src
│ └───users
└───project
├───deployment
│ .credentials_dev
│ .credentials_prod
│ ca.cer
│ docker-compose.yml
│ Dockerfile
│ init.sql
│ nginx_dev.conf
│ nginx_prod.conf
│
├───src
└───users
以及两个容器app_dev和app_prod,这两个卷适当地安装到文件夹/host/dev和/host/prod中。
我尝试了在这里找到的多种解决方案,但所有不同变体都返回了以下错误:
ERROR: Service 'app_dev' failed to build: COPY failed: stat /var/lib/docker/tmp/docker-builder264200969/ca.cer: no such file or directory
ERROR: Service 'app_dev' failed to build: COPY failed: Forbidden path outside the build context: ../ca.cer ()
当docker compose试图构建图像时,错误总是出现在该字符串上:
COPY deployment/ca.cer /code/
请告诉我如何达到预期的结果。
Deployment文件夹在构建上下文之外。Docker将内部的所有文件作为构建上下文传递给部署文件。然而,部署文件夹本身就在它之外。
将您的副本声明改为:
COPY ./ca.cer /code/
因为在图像中,您已经在该文件夹中了。