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

如何通过Dockerfile执行指定的Docker run命令?

正确实现Docker自动执行启动命令的Dockerfile配置

首先得明确:docker run里的-d(后台运行容器)、--name di(给容器命名)是Docker客户端的参数,这些没法写到Dockerfile里——Dockerfile只负责定义容器启动后内部要执行的命令,管不了Docker客户端的操作逻辑。

你原命令里,真正要让容器内部执行的命令是cli start accept --token your_token_here,之前的MY_DOCKER_IMAGE/cli其实是镜像默认的命令入口,对应镜像里的可执行程序。

你原有配置的问题

你写的CMD -d --name di MY_DOCKER_IMAGE/cli start accept --token your_token_here有两个核心错误:

  • 把Docker客户端的参数(-d、--name)塞进了CMD里,这些参数是给docker run命令用的,不是容器内部要运行的命令
  • CMD格式错误,直接这么写会被当成一个完整的命令去执行,必然报错

正确的Dockerfile写法

推荐:数组格式

这种格式能避免shell解析的坑,是Docker官方建议的写法:

FROM my_docker_image:latest

CMD ["cli", "start", "accept", "--token", "your_token_here"]

可选:shell格式

如果需要依赖shell环境(比如要替换环境变量),可以用这种写法:

FROM my_docker_image:latest

CMD cli start accept --token your_token_here

额外提醒

  • --name di和-d还是得在docker run时指定,比如docker run -d --name di 你构建好的新镜像名——Dockerfile管不了容器的命名和运行模式,这些是启动容器时的外部参数
  • 要是不想把token硬写到Dockerfile里,建议用环境变量动态传递:
    FROM my_docker_image:latest
    
    ENV TOKEN=""
    CMD ["sh", "-c", "cli start accept --token $TOKEN"]
    
    启动时传入token:docker run -d --name di -e TOKEN=你的真实token 你构建好的新镜像名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:00:04