Dockerfile
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
此错误告诉我Dockerfile中的useradd
在“docker run”期间未执行。
我怎么能实现这个目标?
CMD ["/usr/bin/id", "-u", "default"]
有效但我希望能够在运行时提供UID和USERNAME,而不是在Dockerfile构建时提供
答案 0 :(得分:4)
详细说明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值。
答案 1 :(得分:1)
创建图像时执行useradd。如果要在启动容器时运行某些命令,请将它们放入在开始时执行的脚本中。