为何Docker Compose无法找到入口点,但docker run可正常运行镜像?
问题原因与解决方法
核心问题:容器内的/app目录被本地挂载覆盖
查看你的docker-compose.yml中ebcmos服务的volumes配置:
volumes: - ./capture/ebcmos:/app/capture:wo - ./logs/ebcmos:/app/ - /dev/ttyUSB0:/dev/ttyUSB0 - ./xmp/ebcmos:/app/xmp/ebcmos
其中- ./logs/ebcmos:/app/这一行会将本地的./logs/ebcmos目录直接挂载到容器的/app根目录下,这会完全覆盖容器镜像中原有的/app目录内容——包括你从builder阶段复制过来的Nssams可执行文件。
而你使用docker run命令时,没有挂载/app目录,因此能直接访问镜像内置的Nssams文件并正常执行。
解决方案:调整挂载路径,避免覆盖/app根目录
修改volumes配置,将本地日志目录挂载到/app下的子目录(比如/app/logs),而非/app本身:
volumes: - ./capture/ebcmos:/app/capture:wo - ./logs/ebcmos:/app/logs # 调整挂载路径至子目录 - /dev/ttyUSB0:/dev/ttyUSB0 - ./xmp/ebcmos:/app/xmp/ebcmos
同时需要确保你的应用程序日志输出路径对应为/app/logs,如果业务逻辑要求必须使用原日志路径,可在Dockerfile的prod阶段提前创建/app/logs目录,再挂载到该子目录,避免覆盖整个/app目录。
验证方法
修改配置后重新执行docker compose up,此时容器内的/app目录不会被覆盖,Nssams文件会保留,服务即可正常启动。
内容的提问来源于stack exchange,提问作者Ben Whitely
相关产品推荐
相关产品推荐

