docker - 惯用的 Makefile 和命令参数

标签 docker makefile docker-compose gnu-make

上下文

我有一个 Makefile 来运行 docker 化的服务

RUN = docker-compose run $(ARGS) --rm serivce

.PHONY: shell
shell:
    ${RUN} /bin/sh

.PHONY: server
server:
    $(eval ARGS=--service-ports) ${RUN}

问题

server 任务需要设置额外的参数(--service-ports)来启动容器。 仅将参数硬编码到 RUN 中是行不通的,因为 shell 也会发布端口并且会失败(让 server 运行)。

问题

根据上下文指定参数 ARGS 的惯用方法是什么?

$(eval ARGS=--service-ports) 有效,但有“正确的方法”吗?

最佳答案

eval 绝对不正确。如果有人运行 make server shell 怎么办?现在,shell 将设置该参数,因为 eval 会全局重置它。

有什么原因你不能只写:

server:
         $(RUN) --service-ports

?一般来说,如果您需要根据每个目标自定义变量,您有两个选择:

您可以使用target-specific variables :

server: ARGS = --service-ports
server:
         $(RUN)

或者您可以使用recursively-expanded variables :

server_ARGS = --service-ports

RUN = docker-compose run $($@_ARGS) --rm service

server:
         $(RUN)

关于docker - 惯用的 Makefile 和命令参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55269713/

相关文章:

django - 在 Docker 容器中与 Django 和 Postgres 之间的连接苦苦挣扎

c - 如何在 makefile 中编写通用命令?

makefile - 如何在 Theos makefile 中包含资源文件?

amazon-web-services - 如何将 Docker 连接到 PlanetScale

docker - Docker批量投资主机到机器

bash - 为什么 Phing/Ant 而不是 Bash 和 Make?

docker - 无法让 Docker 之外的 Docker 与 ECS 中的 Jenkins 一起工作

docker - 使用dockerfile运行mkdir命令

docker - 由于输入/输出错误无法重启 Docker 容器?

python - 在 python 脚本中运行 docker run 命令