VS Code Docker开发容器启动失败求助(附配置与日志)
FrankenPHP Docker开发容器主App服务启动后报错终止的排查与解决
问题现象
在VS Code中搭建依赖Memcached和Postgres服务的FrankenPHP Docker开发容器时,Memcached与Postgres服务可正常运行,但主App服务启动后立即报错终止,VS Code远程容器扩展返回如下错误日志:
✔ Container newseeds_devcontainer-db-1 Running 0.0s ✔ Container newseeds_devcontainer-cache-1 Running 0.0s ✔ Container newseeds_devcontainer-app-1 Started 0.0s [1292 ms] Start: Run: docker ps -q -a --filter label=com.docker.compose.project=newseeds_devcontainer --filter label=com.docker.compose.service=app [1330 ms] Start: Run: docker inspect --type container 38bd8826df6d [1442 ms] Start: Inspecting container [1442 ms] Start: Run: docker inspect --type container 38bd8826df6d56722aa2b2b25d8f082630e1f7c2043e9c722135edd839838a7f [1473 ms] Start: Run in container: /bin/sh [1474 ms] Start: Run in container: uname -m [1505 ms] Shell server terminated (code: 1, signal: null) [1505 ms] Error response from daemon: container 38bd8826df6d56722aa2b2b25d8f082630e1f7c2043e9c722135edd839838a7f is not running [1505 ms] Start: Run in container: (command -v getent >/dev/null 2>&1 && getent passwd 'root' || grep -E '^root|^[^:]*:[^:]*:root:' /etc/passwd || true) [1505 ms] Stdin closed! [1505 ms] Error: An error occurred setting up the container. [1505 ms] at CtA (/Users/fpolli/.vscode/extensions/ms-vscode-remote.remote-containers-0.354.0/dist/spec-node/devContainersSpecCLI.js:409:3709) [1505 ms] at process.processTicksAndRejections (node:internal/process/task_queues:95:5) [1505 ms] at async UtA (/Users/fpolli/.vscode/extensions/ms-vscode-remote.remote-containers-0.354.0/dist/spec-node/devContainersSpecCLI.js:481:3865) [1505 ms] at async $C (/Users/fpolli/.vscode/extensions/ms-vscode-remote.remote-containers-0.354.0/dist/spec-node/devContainersSpecCLI.js:481:4807) [1505 ms] at async QrA (/Users/fpolli/.vscode/extensions/ms-vscode-remote.remote-containers-0.354.0/dist/spec-node/devContainersSpecCLI.js:661:13255) [1505 ms] at async urA (/Users/fpolli/.vscode/extensions/ms-vscode-remote.remote-containers-0.354.0/dist/spec-node/devContainersSpecCLI.js:661:12996) [1507 ms] Exit code 1
涉及配置文件
docker-compose.yaml
services: app: build: context: . entrypoint: php artisan octane:frankenphp --max-requests=1 ports: - "80:8000" - "443:443" depends_on: - db - cache volumes: - storage://D/www/laravel-projects/newseeds/storage command: sleep infinity, networks: - storefront - backroom db: image: postgres:latest restart: unless-stopped volumes: - data://D/PostgreSQL/data environment: POSTGRES_USER: theuser POSTGRES_DB: arandomname POSTGRES_PASSWORD: "very ultra secret" networks: - backroom cache: image: memcached:latest restart: unless-stopped #volumes: networks: - backroom networks: storefront: backroom: volumes: data: storage:
Dockerfile
FROM dunglas/frankenphp RUN install-php-extensions pcntl COPY . /app ENTRYPOINT ["php", "artisan", "octane:frankenphp"]
devcontainer.json
{ "name": "the name", "dockerComposeFile": "./docker-compose.yaml", "service": "app", "workspaceFolder": "/workspaces/${localWorkspaceFolderBasename}", "features": { "ghcr.io/devcontainers/features/node:1": { "nodeGypDependencies": true, "version": "lts", "nvmVersion": "latest" } }, "forwardPorts": [ 5432 ], //"remoteUser": "root", "customizations": { "vscode": { "extensions": [ "onecentlin.laravel5-snippets" ] } } }
补充说明
Windows 11和MacBook上均出现该问题:Windows上需启用devcontainer.json中的remoteUser配置才能读取文件,MacBook上需注释该行,本文编写于MacBook,因此该行处于注释状态。
解决方案
1. 修复docker-compose.yaml语法错误
command: sleep infinity,末尾多余逗号,导致命令解析失败,改为command: sleep infinity- 卷挂载格式错误:
storage://D/www/laravel-projects/newseeds/storage不符合绑定挂载格式,应改为./storage:/app/storage(根据本地项目路径调整),当前格式会被识别为命名卷,导致容器无法访问本地项目文件
2. 调整容器启动逻辑适配Dev Container
Dev Container需要容器保持运行状态以完成初始化,当前Octane启动命令若遇到依赖缺失、环境变量错误会直接退出,建议:
- 在Dockerfile中添加依赖安装步骤:
FROM dunglas/frankenphp RUN install-php-extensions pcntl pgsql redis # 安装Composer COPY --from=composer:latest /usr/bin/composer /usr/bin/composer WORKDIR /app COPY . . RUN composer install --no-dev --optimize-autoloader ENTRYPOINT ["php", "artisan", "octane:frankenphp"]
- 优先用
command: sleep infinity保持容器运行,待Dev Container初始化完成后再手动启动Octane服务,或调整entrypoint确保服务稳定运行
3. 查看容器具体错误日志
执行以下命令获取App容器的详细退出原因,定位问题根源:
docker logs newseeds_devcontainer-app-1
常见原因包括:环境变量缺失、数据库连接失败、依赖未安装、权限不足等。
4. 修正devcontainer.json语法错误
原文件features对象末尾多余逗号,已在修正版本中移除,避免JSON解析失败。
内容的提问来源于stack exchange,提问作者Fred Polli
相关产品推荐
相关产品推荐

