You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ubuntu 20.04下Makefile中$()语法无法获取Docker容器ID求助

问题分析与解决方法

一、先排查基础问题(shell测试无输出)

  1. 验证无sudo的docker命令是否正常
    直接执行:

    docker create --rm wheel_img
    

    如果能输出容器ID,说明问题出在sudo的环境配置上;如果仍无输出,检查:

    • 镜像wheel_img是否存在:执行docker images | grep wheel_img确认。
    • 镜像是否能正常创建容器:尝试docker create --rm wheel_img echo test,若报错,根据错误提示修复镜像(比如镜像ENTRYPOINT配置异常)。
  2. 解决sudo下docker无输出的问题
    如果不带sudo正常,带sudo无输出,尝试以下方法:

    • 使用docker绝对路径执行:
      sudo /usr/bin/docker create --rm wheel_img
      
      (路径可通过which docker获取)
    • 保留用户环境变量执行:
      sudo -E docker create --rm wheel_img
      
    • 捕获stderr查看是否有隐藏错误:
      sudo docker create --rm wheel_img 2>&1
      
      若输出权限或路径相关错误,对应调整sudo配置或docker权限。

二、修复Makefile的语法问题

你的Makefile中$(sudo docker create --rm wheel_img)是Make的变量引用语法,而非shell的命令替换,这是核心问题。正确写法需要转义$,让shell处理命令替换:

修复后的Makefile片段:

deploy:
    python3 -m build
    sudo docker build . -t wheel_img
    sudo docker cp $$(sudo docker create --rm wheel_img):/tmp/xyz.whl wheelhouse/

更清晰的写法(拆分步骤):

deploy:
    python3 -m build
    sudo docker build . -t wheel_img
    @CONTAINER_ID=$$(sudo docker create --rm wheel_img); sudo docker cp $$CONTAINER_ID:/tmp/xyz.whl wheelhouse/

(@用于隐藏命令本身的输出,仅执行操作)

内容的提问来源于stack exchange,提问作者Seth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 12:30:20