【发布时间】:2019-06-12 21:30:06
【问题描述】:
我是 docker/k8s 世界的新手...有人问我是否可以使用 args 部署容器来修改行为(通常如果应用程序在“主”或“从”版本中运行),我做过。也许不是最佳解决方案,但它有效:
这是一个简单的验证测试。我制作了一个自定义图像,里面有一个脚本: 角色.sh:
#!/bin/sh
ROLE=$1
echo "You are running "$ROLE" version of your app"
Dockerfile:
FROM centos:7.4.1708
COPY ./role.sh /usr/local/bin
RUN chmod a+x /usr/local/bin/role.sh
ENV ROLE=""
ARG ROLE
ENTRYPOINT ["role.sh"]
CMD ["${ROLE}"]
如果我使用以下命令通过 docker 启动这个容器:
docker run -dit --name test docker.local:5000/test master
我最终得到以下日志,这正是我正在寻找的:
You are running master version of your app
现在我想在 k8s 上使用 yaml 文件来实现相同的行为。我尝试了几种方法,但都没有奏效。
YAML 文件:
apiVersion: v1
kind: Pod
metadata:
name: master-pod
labels:
app: test-master
spec:
containers:
- name: test-master-container
image: docker.local:5000/test
command: ["role.sh"]
args: ["master"]
我看到了很多不同的方法来做到这一点,我必须说我仍然不明白 ARG 和 ENV 之间的区别。
我也试过
- name: test-master-container
image: docker.local:5000/test
env:
- name: ROLE
value: master
和
- name: test-master-container
image: docker.local:5000/test
args:
- master
但是这些都不起作用,我的 pod 始终处于 CrashLoopBackOff 状态。 提前感谢您的帮助!
【问题讨论】:
标签: docker kubernetes yaml args