Hen*_*nri 3 docker dockerfile docker-compose
我有一个这样的项目结构:
root (folder)
--- foo (folder)
------ target (folder)
------ Dockerfile (file)
--- bar (folder)
------ target (folder)
------ Dockerfile (file)
--- docker-compose.yml (file)
Run Code Online (Sandbox Code Playgroud)
这是 docker-compose 文件:
version: "3.9"
services:
foo-service:
image: foo-image:latest
container_name: foo-container
build:
context: .
dockerfile: foo/Dockerfile
bar-service:
image: bar-image:latest
container_name: bar-container
build:
context: .
dockerfile: bar/Dockerfile
Run Code Online (Sandbox Code Playgroud)
Dockerfile 两者都相同,如下所示:
FROM openjdk:8-jdk-alpine
COPY target/*.jar app.jar
CMD ["java", "-jar", "/app.jar"]
Run Code Online (Sandbox Code Playgroud)
当我尝试运行时docker-compose up
,它在步骤 2(复制步骤)上失败:“未指定源文件”。当docker build .
单独运行每个时,它可以工作。
我该如何解决这个问题?
当您构建 Docker 映像时,您可以控制两个基本的事情。上下文目录是命令的基目录COPY
;Dockerfile位置是 Dockerfile 上下文中的特定文件。在 Compose 中,您可以使用选项指定这些build: {context: ..., dockerfile: ...}
;在普通 Docker 中,这些是路径参数docker build
和-f
选项。
当你的 Dockerfile 说:
build:
context: .
dockerfile: foo/Dockerfile
Run Code Online (Sandbox Code Playgroud)
这相当于 CLI 命令:
docker build -f foo/Dockerfile .
Run Code Online (Sandbox Code Playgroud)
...路径中的路径foo/Dockerfile
将相对于root
( .
) 目录进行解释。
可能你实际运行的是
cd foo
docker build .
Run Code Online (Sandbox Code Playgroud)
或者,等价地,
docker build foo
Run Code Online (Sandbox Code Playgroud)
您可以用 Compose 语法来表达
build:
context: foo
# dockerfile: Dockerfile
Run Code Online (Sandbox Code Playgroud)
或者更简洁地说
build: foo
Run Code Online (Sandbox Code Playgroud)
(Compose 本身将为image:
和分配合理的默认值,如果您正在使用本地映像,则container_name:
无需显式指定这些默认值,除非您计划将构建的映像推送到某个地方。)build:
归档时间: |
|
查看次数: |
2443 次 |
最近记录: |