基于oott123/novnc镜像时Docker COPY指令失效问题求助
问题:替换镜像内的vncmain.sh后容器启动报错"command not found"
有一个内置/app目录的Docker镜像oott123/novnc,直接运行该镜像可正常工作,因为它使用默认的/app/vncmain.sh。但用以下Dockerfile复制本地vncmain.sh到镜像内的/app/vncmain.sh并构建新镜像后,运行容器时提示找不到该命令。
Dockerfile内容:
FROM oott123/novnc:latest COPY vncmain.sh /app/vncmain.sh
构建命令docker build -t myimage/novnc .的输出显示复制步骤已完成:
❯ docker build -t myimage/novnc . [+] Building 0.2s (7/7) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 34B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 34B 0.0s => [internal] load metadata for docker.io/oott123/novnc:latest 0.0s => [internal] load build context 0.0s => => transferring context: 32B 0.0s => [1/2] FROM docker.io/oott123/novnc:latest 0.0s => CACHED [2/2] COPY vncmain.sh /app/vncmain.sh 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:80211fc1f344e7beb50024c08c7bfc4606ccb3e33e97fabdd67412366c2d8577 0.0s => => naming to docker.io/myimage/novnc
运行docker run -p 9000:9000 myimage/novnc时出现错误:
❯ docker run -p 9000:9000 myimage/novnc:latest [s6-init] making user provided files available at /var/run/s6/etc...exited 0. [s6-init] ensuring user provided files have correct perms...exited 0. [fix-attrs.d] applying ownership & permissions fixes... [fix-attrs.d] 010-app: applying... [fix-attrs.d] 010-app: exited 0. [fix-attrs.d] done. [cont-init.d] executing container initialization scripts... [cont-init.d] 010-setup-vnc: executing... Would you like to enter a view-only password (y/n)? Password:Verify:[cont-init.d] 010-setup-vnc: exited 0. [cont-init.d] 020-setup-sudo: executing... [cont-init.d] 020-setup-sudo: exited 0. [cont-init.d] done. [services.d] starting services [services.d] done. xauth: file /home/user/.Xauthority does not exist WebSocket server settings: - Listen on :9001 - No SSL/TLS support (no cert file) - proxying from :9001 to 127.0.0.1:5911 New 'aff40718fd07:11 (user)' desktop is aff40718fd07:11 Creating default startup script /home/user/.vnc/xstartup Creating default config /home/user/.vnc/config Starting applications specified in /home/user/.vnc/xstartup Log file is /home/user/.vnc/aff40718fd07:11.log sudo: /app/vncmain.sh: command not found [cmd] /sbin/entrypoint.sh exited 1 [cont-finish.d] executing container finish scripts... [cont-finish.d] done. [s6-finish] waiting for services. [s6-finish] sending all processes the TERM signal. [s6-finish] sending all processes the KILL signal and exiting.
解决方案
核心原因是复制进去的vncmain.sh缺少可执行权限。原镜像中的脚本默认带有可执行权限,但本地复制的文件在Docker镜像中不会自动继承权限,需要手动添加。
方法一:添加chmod命令修改权限
修改Dockerfile,增加赋予可执行权限的步骤:
FROM oott123/novnc:latest COPY vncmain.sh /app/vncmain.sh RUN chmod +x /app/vncmain.sh
方法二:使用COPY的--chmod参数(Docker 19.03+支持)
直接在复制时设置权限,减少镜像层数:
FROM oott123/novnc:latest COPY --chmod=+x vncmain.sh /app/vncmain.sh
重新构建镜像后运行,即可解决该问题。
内容的提问来源于stack exchange,提问作者ahmetkca
相关产品推荐
相关产品推荐

