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

Docker Compose运行时entrypoint.sh未找到问题求助

解决Docker Compose启动时entrypoint.sh找不到的问题

错误信息

Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./entrypoint.sh": stat ./entrypoint.sh: no such file or directory: unknown

原Dockerfile内容

FROM debian:bullseye

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get install -y cmake build-essential curl git

RUN echo "deb http://archive.raspberrypi.org/debian/ bullseye main" > /etc/apt/sources.list.d/raspi.list
RUN curl "https://archive.raspberrypi.org/debian/raspberrypi.gpg.key" | apt-key add -

RUN apt-get update && apt-get install -y libcamera-dev libjpeg-dev libgphoto2-dev

RUN git clone https://github.com/ArduCAM/mjpg-streamer.git /src
WORKDIR /src/mjpg-streamer-experimental

RUN sed -i "/input_libcamera/p;/input_/d;/output_http/p;/output_/d" CMakeLists.txt
RUN make && make install

COPY entrypoint.sh /entrypoint.sh
ENV INPUT_FLAGS "-r 1640x1232 -f 10"
ENV OUTPUT_FLAGS "-w ./www"
RUN chmod +x entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]

Docker Compose配置

version: "3"

services:
  mjpg-streamer:
    build:
      context: ./mjpg-streamer
      dockerfile: Dockerfile
    restart: always
    privileged: true
    ports:
      - 8080:8080
    environment:
      - INPUT_FLAGS=-r 1640x1232 -f 10
      - OUTPUT_FLAGS=-w ./www
    volumes:
      - /run/udev:/run/udev:ro
      - /opt/Octoprint/mjpg-streamer:/mjpg-streamer

  octoprint:
    image: octoprint/octoprint:latest
    restart: always
    privileged: true
    ports:
      - 9003:80
    devices:
      - /dev/ttyUSB0:/dev/ttyUSB0
    volumes:
      - /opt/Octoprint/data/octoprint:/octoprint
      - /proc/cpuinfo:/proc/cpuinfo:ro
      - /usr/bin/vcgencmd:/usr/bin/vcgencmd:ro
      - /usr/lib/aarch64-linux-gnu/libvcos.so.0:/usr/lib/aarch64-linux-gnu/libvcos.so.0:ro
      - /usr/lib/aarch64-linux-gnu/libvchiq_arm.so.0:/usr/lib/aarch64-linux-gnu/libvchiq_arm.so.0:ro

已尝试的调整方案

  • 尝试1:修改ENTRYPOINT为./mjpg-streamer/entrypoint.sh
  • 尝试2:COPY路径改为/entrypoint.sh /entrypoint.sh,ENTRYPOINT保持./entrypoint.sh
  • 尝试3:COPY路径改为/entrypoint.sh /entrypoint.sh,ENTRYPOINT改为./mjpg-streamer/entrypoint.sh
  • 尝试4:COPY路径改为entrypoint.sh entrypoint.sh,ENTRYPOINT保持./entrypoint.sh
  • 尝试5:COPY路径改为./mjpg-streamer/entrypoint.sh /entrypoint.sh,ENTRYPOINT保持./entrypoint.sh

问题根源与解决方法

核心根源

Dockerfile最后设置的WORKDIR是/src/mjpg-streamer-experimental,但你把entrypoint.sh复制到了根目录/entrypoint.sh,而ENTRYPOINT ["./entrypoint.sh"]是相对当前工作目录的路径,自然找不到文件。另外部分尝试中chmod命令用了相对路径,同样会因为WORKDIR的问题执行无效。

修复方案

方案1:使用绝对路径调用entrypoint

直接用绝对路径指定ENTRYPOINT,同时修正chmod的路径:

COPY entrypoint.sh /entrypoint.sh
ENV INPUT_FLAGS "-r 1640x1232 -f 10"
ENV OUTPUT_FLAGS "-w ./www"
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

方案2:将文件复制到当前WORKDIR

如果偏好相对路径,把entrypoint.sh复制到当前工作目录:

COPY entrypoint.sh ./entrypoint.sh
ENV INPUT_FLAGS "-r 1640x1232 -f 10"
ENV OUTPUT_FLAGS "-w ./www"
RUN chmod +x ./entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]

额外验证步骤(可选)

可以在Dockerfile中添加验证步骤,确保文件被正确复制:

RUN ls -l /entrypoint.sh  # 对应方案1的路径
# 或者方案2用 RUN ls -l ./entrypoint.sh

隐藏坑排查

如果上述方案无效,检查entrypoint.sh的换行符:若脚本在Windows下编辑,CRLF换行符会导致容器执行时出现类似"文件找不到"的错误,可在Dockerfile中添加转换步骤:

RUN apt-get install -y dos2unix && dos2unix /entrypoint.sh

内容的提问来源于stack exchange,提问作者Naklsonofnakkl

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 14:06:08