You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 10:50:17