makefile 不能 运行 docker 带有 -w -v -u 选项的图像
makefile cannot run docker image with -w -v -u options
我有可用的 docker 图像,我可以通过命令在本地 运行
docker run --rm -u $(id -u) -v${PWD}:${PWD} -w${PWD} protocbuilder:1.0 [other unimportant args]
一切正常。我想使用 makefile 来自动化使用该容器的东西,所以我创建了 make 命令:
test:
docker run --rm -u $(id -u) -v${PWD}:${PWD} -w${PWD} protocbuilder:1.0 [other unimportant args]
但是当我调用 make test
时,我得到以下输出:
docker run --rm -u -v/Users/mikolaj/GolandProjects/project:/Users/mikolaj/GolandProjects/project -w/Users/mikolaj/GolandProjects/project protocbuilder:1.0 [other unimportant args]
docker: Error response from daemon: unable to find user -v/Users/mikolaj/GolandProjects/project: no matching entries in passwd file.
make: *** [test] Error 125
我不太喜欢 makefile 的东西,所以我不明白为什么 makefile 会失败,而在控制台中 docker run
的标准调用中一切正常。使用 -u
、-v
和 -w
参数将用户映射到容器似乎存在问题。我应该在 makefile 中做一些额外的步骤来使它正常工作吗?或者,也许我需要在 makefile 中的 docker run
命令中更改某些内容?
提前致谢
$(...)
是 (GNU) make 函数语法。如果您需要在 shell 命令中包含文字 $
以进行命令替换之类的操作,则需要通过加倍 $
来转义它
test:
docker run --rm -u $$(id -u) ...
# ^^
您也可以使用反引号语法来避免这个转义问题
test:
docker run --rm -u `id -u` ...
类似地,${PWD}
在命令在 shell 中获得 运行 之前被 make 扩展,但这可能不是显着差异。
我有可用的 docker 图像,我可以通过命令在本地 运行
docker run --rm -u $(id -u) -v${PWD}:${PWD} -w${PWD} protocbuilder:1.0 [other unimportant args]
一切正常。我想使用 makefile 来自动化使用该容器的东西,所以我创建了 make 命令:
test:
docker run --rm -u $(id -u) -v${PWD}:${PWD} -w${PWD} protocbuilder:1.0 [other unimportant args]
但是当我调用 make test
时,我得到以下输出:
docker run --rm -u -v/Users/mikolaj/GolandProjects/project:/Users/mikolaj/GolandProjects/project -w/Users/mikolaj/GolandProjects/project protocbuilder:1.0 [other unimportant args]
docker: Error response from daemon: unable to find user -v/Users/mikolaj/GolandProjects/project: no matching entries in passwd file.
make: *** [test] Error 125
我不太喜欢 makefile 的东西,所以我不明白为什么 makefile 会失败,而在控制台中 docker run
的标准调用中一切正常。使用 -u
、-v
和 -w
参数将用户映射到容器似乎存在问题。我应该在 makefile 中做一些额外的步骤来使它正常工作吗?或者,也许我需要在 makefile 中的 docker run
命令中更改某些内容?
提前致谢
$(...)
是 (GNU) make 函数语法。如果您需要在 shell 命令中包含文字 $
以进行命令替换之类的操作,则需要通过加倍 $
test:
docker run --rm -u $$(id -u) ...
# ^^
您也可以使用反引号语法来避免这个转义问题
test:
docker run --rm -u `id -u` ...
类似地,${PWD}
在命令在 shell 中获得 运行 之前被 make 扩展,但这可能不是显着差异。