从任意文件夹在构建上下文和Dockerfile文件夹中编写文件

时间:2019-02-01 10:42:45

标签: docker docker-compose dockerfile

我想在保持项目文件结构整洁的同时编写服务。但是Docker似乎在构建上下文之外存在路径问题。我正在创建一个软件包,并希望将所有与Docker相关的内容保留在项目根目录下的文件夹中。但是我找不到从docker-composeDockerfile引用项目文件的方法。创建容器时,必须复制项目中的文件。

这是我当前的项目结构:

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相关文件放置在任意文件夹中,并能够在撰写文件中指定构建上下文而无需进行其他更改。

1 个答案:

答案 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

不确定是否喜欢。