我正在寻找由Github上的某人创建的Dockerfile 我注意到每次在Docker文件中定义一个RUN,它前面都有一个USER用户名指令。
是强制性的吗?或者它是否设置了级联风格?
USER root
RUN commandA
USER www
RUN commandB
....
RUN commandC
用户将执行commandC?最新申报(www)? 或者还有其他东西(其他一些Docker命令可以将其更改为默认值,显然除了USER)执行后RUN本身可能会重置用户吗?
或者仅仅是为了更加冗长?
答案 0 :(得分:2)
没有必要,没有。为Dockerfile提供USER
以避免以root
运行所有内容始终是一种好习惯,但有时构建需要前后翻转。您可能会看到的地方:
...
USER alice
RUN ... // do stuff
USER root
RUN ... // do super privileged stuff
USER alice
CMD ... // run my app as non-privileged user
...
如果您不需要前后翻转,则单个USER
指令将级联到其下方的所有说明。
...
USER alice
RUN ... // as alice
WORKDIR ...
RUN ... // as alice
ENV ...
RUN ... // as alice
CMD ... // as alice
...
答案 1 :(得分:1)
用户将执行commandC?
如果USER
和commandB
之间没有commandC
命令,那么www
的用户commandC
运行USER user
:< / p>
USER指令设置运行映像时要使用的用户名或UID,以及在Dockerfile中关注的任何RUN,CMD和ENTRYPOINT指令
因此,您只需使用RUN
将用户切换到您真正需要的位置,而不是每个USER
命令。顺便说一下,CMD
也适用于ENTRYPOINT
和USER
,这意味着最后func captureOutput(_ captureOutput: AVCaptureOutput!, didOutputSampleBuffer sampleBuffer: CMSampleBuffer!, from connection: AVCaptureConnection!) {
let imageBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)!
let ciimage : CIImage = CIImage(cvPixelBuffer: imageBuffer)
let image : UIImage = self.convert(cmage: ciimage)
}
// Convert CIImage to CGImage
func convert(cmage:CIImage) -> UIImage
{
let context:CIContext = CIContext.init(options: nil)
let cgImage:CGImage = context.createCGImage(cmage, from: cmage.extent)!
let image:UIImage = UIImage.init(cgImage: cgImage)
return image
}
命令中的用户也是在容器中运行您的进程的用户。