Windows10 Docker启动容器时execlineb脚本执行失败求助
First off, that execlineb: usage error almost always points to a Windows-specific quirk breaking your script—since your teammates on Linux don’t hit this, the issue is likely tied to how Windows handles file formats or Docker’s backend on your system. Let’s walk through the most common fixes:
1. 换行符格式不兼容(最可能的元凶)
Windows uses CRLF (\r\n) line endings, while Linux (and Alpine) uses LF (\n). Execline is a line-based interpreter, so the extra \r character gets treated as part of your commands or arguments, throwing off its syntax parsing.
Fixes:
- Convert the script to LF line endings:
- If you’re building the image locally on Windows, add a step in your Dockerfile to convert the script using
dos2unix:# Add dos2unix to Alpine RUN apk add --no-cache dos2unix # Copy your script into the container COPY run-nginx /etc/s6-overlay/sv/nginx/run # Convert line endings and set executable permissions RUN dos2unix /etc/s6-overlay/sv/nginx/run && chmod +x /etc/s6-overlay/sv/nginx/run - If you’re using Git, set
core.autocrlf=falsefor this repo to prevent Windows from converting line endings automatically:git config core.autocrlf false
- If you’re building the image locally on Windows, add a step in your Dockerfile to convert the script using
- Mount scripts via WSL2 instead of Windows filesystem: If you’re mounting the script from your Windows host to the container, switch to using a WSL2 directory (e.g.,
\\wsl$\Ubuntu\home\your-user\scripts)—WSL2 uses Linux-style line endings natively.
2. Verify s6-overlay Installation & Paths
Double-check that your Alpine image has s6-overlay properly installed, and that your script is in the correct s6 service directory:
- Ensure your Dockerfile includes the full s6-overlay setup (for x86_64 Alpine):
# Install s6-overlay ADD https://github.com/just-containers/s6-overlay/releases/download/v3.1.2.1/s6-overlay-noarch.tar.xz /tmp RUN tar -C / -Jxpf /tmp/s6-overlay-noarch.tar.xz ADD https://github.com/just-containers/s6-overlay/releases/download/v3.1.2.1/s6-overlay-x86_64.tar.xz /tmp RUN tar -C / -Jxpf /tmp/s6-overlay-x86_64.tar.xz # Set s6 init as entrypoint ENTRYPOINT ["/init"] - Confirm your script is placed at
/etc/s6-overlay/sv/nginx/run(the standard path for s6 services) and has executable permissions (chmod +x).
3. Tweak Your Execline Script Syntax
Your original script is written as a single line, which can be finicky with Windows line endings. Try rewriting it with proper line breaks (execline supports multi-line scripts):
#!/usr/bin/execlineb -P foreground { sleep 2 nginx }
Also, verify that execlineb is indeed at /usr/bin/execlineb in your Alpine image—run docker exec -it your-container which execlineb to confirm the path matches your shebang line.
4. Switch Docker Desktop to WSL2 Backend
Hyper-V (the default backend for some Windows 10 setups) has filesystem compatibility issues with Linux containers. Switching to WSL2 fixes many of these:
- Open Docker Desktop Settings → Resources → WSL Integration
- Enable integration with your installed WSL2 distribution (e.g., Ubuntu)
- Restart Docker Desktop
- Rebuild your image or pull the working Linux-built image and run it again
Quick Verification Step
If you want to isolate the issue, run a temporary Alpine container on your Windows machine and test the script directly:
docker run -it --rm alpine sh # Inside the container: apk add --no-cache s6-execline echo '#!/usr/bin/execlineb -P foreground { sleep 2 } nginx' > test-run.sh chmod +x test-run.sh ./test-run.sh
If this works, the problem is definitely with how your local script files are being handled (line endings or mounting). If it still fails, double-check your s6-overlay version or script syntax.
内容的提问来源于stack exchange,提问作者Ivan Kirichuk

