Docker文件
FROM ubuntu
ENV UID "1234"
ENV USERNAME "default"
RUN addgroup $USERNAME && useradd -u $UID -g $USERNAME -ms /bin/bash $USERNAME
CMD ["/usr/bin/id", "-u", "myname"]
并通过以下方式运行docker:
docker build -t setuser .
docker run -e UID=5555 -e USERNAME=myname setuser
输出值
/usr/bin/id: 'myname': no such user
此错误告诉我,在“docker run”期间未执行Dockerfile中的
useradd
。我怎样才能做到这一点?
CMD ["/usr/bin/id", "-u", "default"]
可以工作,但是我希望能够在运行时而不是在Dockerfile构建时提供UID和USERNAME
最佳答案
详细说明Henry's answer
构建镜像时,将执行以下Dockerfile部分。
FROM ubuntu
ENV UID "1234"
ENV USERNAME "default"
RUN addgroup $USERNAME && useradd -u $UID -g $USERNAME -ms /bin/bash $USERNAME
因此,这次设置了
UID=1234
和USERNAME=default
。运行图像时,它以ENTRYPOINT&CMD开头。它对
RUN addgroup $USERNAME ...
没有影响因此,您需要运行脚本来使用传递的ENV。
#!/bin/bash
addgroup $USERNAME && useradd -u $UID -g $USERNAME -ms /bin/bash $USERNAME
id -u $USERNAME
在这里,将使用您传递的ENV值。
关于docker - 在 “docker run”时间覆盖Dockerfile覆盖环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48610525/