docker 在容器外执行某个容器内的某个命令

有时候我们想执行某个容器的某条命令,但又不想进入容器内。那该怎么办?

于是脚本可以这样写

#!/bin/bash
DOCKER_ID=62f3f40ab240
sudo docker exec -it $DOCKER_ID /bin/bash -c 'cd /packages/detectron && python tools/train.py'

done

参考:宿主机执行某容器内的命令

### 如何在启动 Docker 容器执行特定命令 当创建并启动一个新的 Docker 容器时,可以通过 `docker run` 命令来指定希望容器启动时运行命令。此命令允许传递一系列选项以及定义容器启动后应立即执行的操作。 对于想要在启动容器的同时执行某个具体命令的情况,可以利用 `-c` 或者 `--cmd` 参数设置默认命令,不过更常用的是直接将命令附加到 `docker run` 的最后面[^1]。下面是一个简单的例子: ```bash $ docker run ubuntu:latest /bin/bash -c "echo Hello world" ``` 这段代码会拉取最新的 Ubuntu 镜像,并在其基础上启动一个新容器,在该容器执行 `/bin/bash -c "echo Hello world"` 这一指令序列,之后输出 “Hello world”。 另一种方式是在构建镜像的过程中通过 Dockerfile 中的 CMD 指令预设好容器启动后的操作。CMD 是指定了容器启动程序及其参数的一条指令;如果用户未提供其他命令,则使用这条作为默认命令。例如: ```Dockerfile FROM ubuntu:latest CMD ["echo", "This message comes from the container's default command"] ``` 一旦基于上述 Dockerfile 构建了一个镜像,每次启动由这个镜像生成的新容器时,默认都会打印出设定的消息。 值得注意的是,除了 `CMD` 还有另一种叫做 ENTRYPOINT 的指令也可以用来配置容器启动行为。两者的区别在于:ENTRYPOINT 设置的内容不会被来自 `docker run` 后面跟的任何额参数覆盖掉,而只是会被追加其后面成为最终调用的一部分。因此,如果需要确保某些脚本总是被执行的话,应该优先考虑使用 ENTRYPOINT 而不是 CMD。 为了实现更加复杂的初始化逻辑,还可以编写 Shell 脚本来封装多个命令,并将其路径放在 `CMD` 或 `ENTRYPOINT` 里让容器执行它。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值