我想在保持项目文件结构整洁的同时编写服务。但是Docker似乎在构建上下文之外存在路径问题。我正在创建一个软件包,并希望将所有与Docker相关的内容保留在项目根目录下的文件夹中。但是我找不到从docker-compose
和Dockerfile
引用项目文件的方法。创建容器时,必须复制项目中的文件。
这是我当前的项目结构:
root/
docker/
docker-compose.yml
Dockerfile
docker_resource.txt
config
src/
project-files.whatever
root-files.txt
现在,如果我$cd docker
和$docker-compose up
,我尝试了两种可能性。我的Dockerfile使用COPY .. /path/in/container
复制文件,或者撰写文件的构建说明如下:
x-build: &my-build
context: ..
dockerfile: docker/Dockerfile
第一种方法无效。显然,Dockerfile无法引用构建上下文之外的任何内容。第二种方法似乎有效,但只有在我将复制命令从docker_resource.txt
更改为docker/docker_resource.txt
后,该方法才有效。理想情况下,我想保留从docker build
{em> 中./docker
的功能,并使事情保持整洁-不必担心Dockerfile中的组合上下文。这可能吗?
至少我希望将docker相关文件放置在任意文件夹中,并能够在撰写文件中指定构建上下文而无需进行其他更改。
答案 0 :(得分:0)
您需要将src/project-files.whatever
视为一个自给自足的最小版本。我将Dockerfile放在src中。它应被视为项目的一部分,并且应特定于它。不过,您仍然需要编辑复制命令。
root/
docker/
docker-compose.yml
docker_resource.txt
config
src/
project-files.whatever
Dockerfile
root-files.txt
您还是想将您的compose和Dockerfile和资源分开。根据{{1}}内部的内容,您可能希望将其移至src。将映像视为程序本身,无需配置。我建议将资源/配置文件放入一个卷中,这样您就不必每次更改都从头开始重建。
另一种实现方法是将Dockerfile放在一个级别之上,并让您的根成为构建上下文。在这种情况下,您的结构将是这样的:
docker_resource
不确定是否喜欢。