kubernetes不会覆盖在Dockerfile中设置的环境变量

NiR*_*iRR 2 docker kubernetes

我的Dockerfile包含用于开发和测试场景的默认环境变量:

ENV mysql_host=mysql \
    mysql_user=app \
    mysql_password=password \
Run Code Online (Sandbox Code Playgroud)

我的k8s yaml包含一个env指令:

spec:
  containers:
    env:
      - name: "mysql_password"
        value: "someotherpassword"
        name: "mysql_host"
        value: "someotherhost"
        name: "mysql_user"
        value: "someotheruser"
Run Code Online (Sandbox Code Playgroud)

但当我执行到我的运行容器时

kubctl exec -it service -- /bin/bash
Run Code Online (Sandbox Code Playgroud)

我仍然将"密码"视为mysql_password.

编辑:从k8s yaml中添加更多以获得完整性.

小智 6

你需要以正确的yaml格式声明所有变量,所以在这个例子中mysql_password将覆盖变量,但mysql_password2不会覆盖,只有在未声明它时才会插入:

spec:
  containers:
    env:
      - name: mysql_password     
        value: "someotherpassword"
        name:mysql_password2
        value: "password" 
      - name: override_password
        value: password3 
Run Code Online (Sandbox Code Playgroud)

意思是如果它以" - "开头,它将覆盖.否则它会将变量插入容器

  • 我认为将“-”添加到“名称”使其有效 YAML,而不是使其插入/覆盖 (2认同)