在Dockerfile中使用显式UID / GID

时间:2018-09-10 20:07:41

标签: docker containers

最佳做法页面提到以下内容: (https://docs.docker.com/develop/develop-images/dockerfile_best-practices/#user

# Subpage entry point
- url: /subpage/.*
  static_files: dist/subpage.html
  upload: dist/subpage.html
  expiration: '10m'
  secure: always
  http_headers:
    X-UA-Compatible: 'IE=edge'

# Index entry point
- url: /.*
  static_files: dist/index.html
  upload: dist/index.html
  expiration: '10m'
  secure: always
  http_headers:
    X-UA-Compatible: 'IE=edge'

显式指定UID / GID的意义是什么? 在什么情况下允许系统分配UID / GID不能提供足够的安全性?

明确指定这些值似乎不利于导致已经使用了明确指定的值(UID / GID)的情况。

1 个答案:

答案 0 :(得分:1)

对于某些人可能依赖于特定数字uid的情况(可能是将数据注入到容器中),我认为这更为重要。

# this needs to be readable by the container process
# it runs as non-root user "www-data"
# we think its uid is 18
sudo chown -R 18 data
sudo docker run -v ./data:/data -p 8888:80 imagename

现在,如果由于基础图像在图像作者或最终用户控制范围之外的更改而导致adduser使uid成为其他内容,则这样的食谱将失效(主机无法直接查看容器的/etc/passwd文件以了解实际的uid是什么。

要变通解决此问题,您可能需要这样的食谱:

# may or may not work to get the uid
CONTAINER_UID=$(sudo docker run --rm imagename id -u)
sudo chown -R "$CONTAINER_UID" data