【发布时间】:2019-10-25 21:53:14
【问题描述】:
我有一个docker-compose.yml 文件,其中包含Dockerfile 的给定服务的构建上下文。
示例 docker-compose:
version: '3'
services:
scd-service:
build:
context: ./cmd/some-service/
dockerfile: Dockerfile
args:
broker: redis:6379
queue: somequeue
depends_on:
- redis
networks:
- backend
redis:
image: "redis:alpine"
restart: unless-stopped
networks:
- backend
它可以找到Dockerfile 并使用:docker-compose up --build some-service 构建它
但是,这将失败。 broker 和 queue 参数永远不会传递给给定的 Dockerfile。
示例Dockerfile:
FROM golang:1.11
// stuff...
ARG broker
ARG queue
CMD ["go", "run", "/go/src/github.com/org/project/cmd/some-service/some-service.go", "--broker $broker", "--queue $queue"]
在构建阶段很明显,这些永远不会被解析:
Step 7/7 : CMD ["go", "run", "/go/src/github.com/org/project/cmd/some-service/some-service.go", "--broker $broker", "--queue $queue"]
随后 Go 程序由于命令行参数无效而崩溃。
如何将 args 从 docker-compose 解析为 Dockerfile?
编辑:奇怪的是,我可以回显正确的值吗?
例子:
ARG broker
ARG queue
RUN echo ${broker}
输出:
Step 7/8 : RUN echo ${broker}
---> Running in c84828847d9a
redis:6379
如何不解析到 CMD 上?
【问题讨论】:
-
Build-args 仅在构建时可用,但
CMD条目在运行时执行。这是一个参考和可能的解决方案:stackoverflow.com/questions/35560894/…
标签: docker docker-compose dockerfile