如何设置官方Docker镜像的UID?
如果我们从官方的Docker镜像启动两个容器
docker run --name some-redis -d redis:alpine docker run --name another-redis -d redis:alpine
他们将运行相同的UID(100)
➜ ~ ps uax|grep redis 100 6721 0.1 0.1 16496 7188 ? Ssl 17:02 0:01 redis-server 100 6913 0.1 0.1 16496 7160 ? Ssl 17:03 0:01 redis-server
这是我想避免的安全风险。 另外,我想避免使用支持用户命名空间的内核。
在我自己的图像中,我可以创build一个简单的初始化脚本。 例如, main.rb
:
uid = ENV['UID']&.to_i `chown -R #{uid}:#{uid} /app` if uid Process.uid = uid || (Process::UID.from_name 'nobody') exec 'rackup'
把这些行放在Dockerfile
:
RUN chown -R nobody:nogroup /app CMD ["ruby", "main.rb"]
然后,我可以通过环境variables为我的容器设置不同的UID。 例如,使用以下docker-compose.yml
:
web: build: . ports: - "127.0.0.1:8080:8080" environment: UID: 100500
我想知道,如果有办法对Docker官方图片做同样的事情(我无法谷歌,但它似乎是官方图片应该提供的关键function)。