我有一个网络应用程序,包含多个服务(包括postgres数据库和redis),在多个存储库中。理想情况下,我希望将所有Docker的东西放在一个仓库中,然后从那里构建。但是,我遇到了麻烦,因为构建容器涉及在其他目录(或存储库)中编译代码,而你不能从另一个目录ADD
。符号链接也不起作用。而且我不想从github拉入容器以避免在野外使用ssh密钥。有没有办法完成我想要做的事情?或者每个repo都需要自己的Dockerfile吗?
答案 0 :(得分:1)
假设您有两个目录parent/project1
和parent/project2
,并且Dockerfile位于parent/project1/
。
您可以ADD
将两个目录放入容器中。
如果您在parent/
$ docker build -f project1/Dockerfile .
Dockerfile就像是跟随。
ADD project1 /path/to/directory1
ADD project2 /path/to/directory2
答案 1 :(得分:1)
最好为每个项目维护一个dockerfile,并保持每个项目独立于其他项目,以便您可以单独构建每个项目。
但是,如果你不能这样做,可能会有一些解决方法。
您的问题是docker构建上下文限制了可以访问文件的范围。我建议您将docker build包装在一个脚本中,该脚本收集所有依赖项并发出构建命令。该脚本可能如下所示:
mkdir build-dir
cp <path-to-file1> build-dir/file1
cp <path-to-file2> build-dirfile2
cp <path-to-Dockerfile> build-dir/Dockerfile
...
docker build -t image .
rm -rf build-dir
Dockerfile将是透明的,因为它假定所有依赖都在构建上下文中。
FROM ...
ADD file1 file1
ADD file2 file2
...