由于构建代码的方式,我在构建docker映像时遇到了一些麻烦。该代码用C#编写,在解决方案中,有许多项目“支持”我要构建的应用程序。
我的问题是,如果我将dockerfile放入根目录,我可以构建它,而没有任何问题,虽然可以,但是我认为这不是最佳方法,因为我们还有其他一些dockerfile我们也需要构建,如果我把它们全部放到根文件夹中,我认为它最终会变得混乱。
因此,如果我将dockerfile放入带有应用程序的文件夹中,如何导航到根文件夹中以获取我需要的文件夹?
我尝试使用“ ../”,但是从我的角度看,它似乎没有用。有什么方法可以做到,或者在这种情况下最佳做法是什么?
答案 0 :(得分:1)
从根目录运行它:
docker build . -f ./path/to/dockerfile
在dockerfile中,您无法真正上升。
当docker守护程序构建映像时,它使用2个参数:
Dockerfile
上下文是您在dockerfile中称为.
的内容。 (例如,COPY . /app
)
它们都会影响最终图像-dockerfile确定将会发生什么。上下文会在哪个文件上告诉Docker它应该执行您在该dockerfile中指定的操作。
内部版本是位于以下位置的文件集 指定的PATH或URL。构建过程可以引用任何文件 在上下文中。例如,您的构建可以使用COPY指令来 在上下文中引用文件。
因此,通常上下文是放置Dockerfile的目录。我的建议是将其保留在原处。以它们的角色(Dockerfile.dev
,Dockerfile.prod
等)命名您的dockerfile,可以在同一个目录中包含其中几个。
毕竟,您是指定上下文的人。因为docker build
命令接受上下文和dockerfile路径。当我跑步时:
docker build .
我实际上是在为其提供当前目录的上下文,(我省略了dockerfile路径,因此默认为PATH/Dockerfile
)
因此,如果您在dockerfiles/Dockerfile.dev
中有一个dockerfile,则应将自己放置在要用作上下文的目录中,然后运行:
docker build . -f dockerfiles/Dockerfile.dev
同样适用于docker-compose
构建部分(您在此处指定上下文和dockerfile路径)
希望是合理的。
答案 1 :(得分:0)
您可以使用RUN命令,然后在&之后执行所需的操作。
RUN cd ../ &