我是docker / k8s世界的新手,有人问我是否可以使用args部署容器来修改行为(通常是应用程序在“主”版本还是“从”版本中工作)。也许不是最佳解决方案,但它可以工作:
这是验证的简单测试。我用一个脚本创建了一个自定义图像:role.sh:
#!/bin/sh
ROLE=$1
echo "You are running "$ROLE" version of your app"
Run Code Online (Sandbox Code Playgroud)
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}"]
Run Code Online (Sandbox Code Playgroud)
如果我使用以下命令从docker启动此容器:
docker run -dit --name test docker.local:5000/test master
Run Code Online (Sandbox Code Playgroud)
我最终得到以下日志,这正是我要查找的内容:
You are running master version of your app
Run Code Online (Sandbox Code Playgroud)
现在,我想使用yaml文件在k8s上具有相同的行为。我尝试了几种方法,但是都没有用。
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"]
Run Code Online (Sandbox Code Playgroud)
我看到了很多不同的方法可以做到这一点,但我必须说,我仍然没有理解ARG和ENV之间的区别。
我也尝试过
- name: test-master-container
image: docker.local:5000/test …Run Code Online (Sandbox Code Playgroud)