如何在开发期间配置docker容器,以便以后可以将其部署到kubernetes

如何在开发期间配置docker容器,以便以后可以将其部署到kubernetes,docker,Docker,我正在为开发目的配置docker容器,目的是(最低限度地)为k8s集群部署重新配置它。当卷装载到本地源目录时,我立即遇到了用户权限问题 为了部署到集群,我将把源目录烘焙到映像中,这实际上是我想要对部署进行的唯一更改 我读过很多文章,建议以本地用户/组id身份运行(在我的例子中是1000/1000) 但所有这些问题似乎都忽略了一个看似关键的细节。当您在docker容器中使用--user来更改用户ID时,您会丢失root,同时还会丢失许多功能,例如whoami。在docker环境中测试

我正在为开发目的配置docker容器,目的是(最低限度地)为k8s集群部署重新配置它。当卷装载到本地源目录时,我立即遇到了用户权限问题

为了部署到集群,我将把源目录烘焙到映像中,这实际上是我想要对部署进行的唯一更改

我读过很多文章,建议以本地用户/组id身份运行(在我的例子中是1000/1000)

但所有这些问题似乎都忽略了一个看似关键的细节。当您在docker容器中使用
--user
来更改用户ID时,您会丢失
root
,同时还会丢失许多功能,例如
whoami
。在docker环境中测试配置更改似乎变得非常麻烦,这在开发过程中很常见

直接开发到docker容器的选项似乎非常有限:

  • 将user/group 1000/1000添加到docker映像,这似乎违反了docker/kubernetes的run anywhere咒语
  • 在开发过程中不断浏览所有文件,并在容器中使用root
对于直接开发成docker容器,这个列表中还有其他更合适的选项吗


我相信
whoami
不起作用的原因是因为您的进程找不到您指定的用户Id的用户名/组。如果您挂载以下两个文件,
whoami
应该可以工作,我相信:
-v/etc/passwd:/etc/passwd-v/etc/group:/etc/group
这似乎可以改进工作流程,但我仍然有一个关于工作流的首要问题。Dockerfile默认情况下以root用户身份安装所有内容,我的用户可以访问其中大部分内容,但无法轻松更改配置。只要需要更改配置,我就可以以root用户身份登录到容器中。这通常涉及到验证一些进程运行,然后更新Docker文件,这比代码更改更不常见,因此额外的登录也可以。然后,当我将一个带标签的版本刻录到映像中时,所有内容都将在该点上作为root运行。这似乎是一个合理的工作流。在仔细考虑之后,正确的方法似乎是在容器中创建一个用户,并以该用户的身份构建应用程序流程。开发时,需要将docker uid(大多数默认值为1000)映射到开发桌面uid。在我的情况下,我方便地达到1000,所以我可以绕过这一步,但是这个页面似乎描述了这个过程:如果有人了解这个过程并且能够提供一个详细的答案,这仍然会非常有帮助。我相信
whoami
不起作用的原因是因为您的过程找不到您指定的用户Id的用户名/组。如果您挂载以下两个文件,
whoami
应该可以工作,我相信:
-v/etc/passwd:/etc/passwd-v/etc/group:/etc/group
这似乎可以改进工作流程,但我仍然有一个关于工作流的首要问题。Dockerfile默认情况下以root用户身份安装所有内容,我的用户可以访问其中大部分内容,但无法轻松更改配置。只要需要更改配置,我就可以以root用户身份登录到容器中。这通常涉及到验证一些进程运行,然后更新Docker文件,这比代码更改更不常见,因此额外的登录也可以。然后,当我将一个带标签的版本刻录到映像中时,所有内容都将在该点上作为root运行。这似乎是一个合理的工作流。在仔细考虑之后,正确的方法似乎是在容器中创建一个用户,并以该用户的身份构建应用程序流程。开发时,需要将docker uid(大多数默认值为1000)映射到开发桌面uid。在我的例子中,我是1000,所以我可以绕过这一步,但这一页似乎描述了这个过程:如果有人理解这个过程,并且可以提供一个详细的答案,这仍然会非常有帮助。