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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 05:07:02