使用fleet我可以指定在启动时在容器内运行的命令.看起来Kubernetes也很容易实现这一点,但我似乎无法找到任何说明如何的东西.您似乎必须专门创建容器才能使用某个命令启动.
拥有一个通用容器并使用不同的参数启动它比为特定情况创建许多不同的容器,或设置和获取环境变量简单得多.
是否可以在启动时指定kubernetes pod在Docker镜像中运行的命令?
sta*_*416 40
我花了45分钟寻找这个.然后我发布一个关于它的问题,并在9分钟后找到解决方案.
在Cassandra 示例中有一个我想要的暗示.在command
下面的图像行:
id: cassandra
kind: Pod
apiVersion: v1beta1
desiredState:
manifest:
version: v1beta1
id: cassandra
containers:
- name: cassandra
image: kubernetes/cassandra
command:
- /run.sh
cpu: 1000
ports:
- name: cql
containerPort: 9042
- name: thrift
containerPort: 9160
env:
- key: MAX_HEAP_SIZE
value: 512M
- key: HEAP_NEWSIZE
value: 100M
labels:
name: cassandra
Run Code Online (Sandbox Code Playgroud)
尽管找到了解决方案,如果在Kubernetes项目中有一些显而易见的地方,我可以看到各种配置文件(pod,服务,复制控制器)的所有可能选项,这将是很好的.
MrE*_*MrE 32
对于那些希望使用带参数的命令的人,您需要提供一个数组
例如
command: [ "bin/bash", "-c", "mycommand" ]
Run Code Online (Sandbox Code Playgroud)
或者也
command:
- "bin/bash"
- "-c"
- "mycommand"
Run Code Online (Sandbox Code Playgroud)
在以上评论中回答德里克·马哈尔的问题:
如果可以使用command指定所有参数,则args的目的是什么?
Dockerfile可以仅具有一个Entrypoint或仅具有CMD,或者两者都可以具有。
如果一起使用,那么CMD中的内容将作为参数传递给ENTRYPOINT中的命令,即
ENTRPOINT ["print"]
CMD ["hello", "world"]
Run Code Online (Sandbox Code Playgroud)
所以在Kubernetes中,当您指定命令即
command: ["print"]
Run Code Online (Sandbox Code Playgroud)
它将覆盖容器的Dockerfile中Entrypoint的值。
如果仅指定参数,则这些参数将被传递到容器入口点中的任何命令。
小智 6
为了指定 kubernetes pod 在启动时在 Docker 映像中运行的命令,我们需要在 yaml 文件中包含命令和参数字段,以便传递命令和参数。例如,
apiVersion: v1
kind: Pod
metadata:
name: command-demo
labels:
purpose: demo-command
spec:
containers:
- name: command-demo-container
image: ubuntu
command: ["/bin/sh"]
args: ["-c", "while true; do echo hello; sleep 10;done"]
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
41740 次 |
最近记录: |