Docker部署Lumen执行php artisan报php服务未运行容器#1错误
问题描述
- 容器构建完成后执行
docker-compose up -d启动无异常 - 通过8100端口访问Lumen服务运行状态正常
- 执行artisan CLI命令时报错,错误信息:
Service "php" is not running container #1 - 部署项目基于Lumen框架,此前使用操作系统为Windows
现有配置
docker-compose.yml
version: "3" services: app: build: context: . dockerfile: Dockerfile image: appbilling-service container_name: appbilling-api volumes: - app-data:/var/www/html - ./docker/php/php.ini:/usr/local/etc/php/php.ini links: - db server: image: nginx:1.23-alpine container_name: appbilling-server ports: - 8100:80 volumes: - app-data:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf links: - app db: image: mysql:8 container_name: mydb command: --default-authentication-plugin=mysql_native_password ports: - 33061:3306 environment: MYSQL_DATABASE: appbilling_test MYSQL_USER: user MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: root volumes: - db-data:/var/lib/mysql - ./docker/mysql/my.cnf:/etc/mysql/my.cnf - ./docker/mysql/mysql.cnf:/etc/mysql/conf.d/mysql.cnf volumes: db-data: app-data:
Dockerfile
FROM composer:2 as vendor COPY ./database ./database COPY ./tests ./tests COPY composer.json composer.json COPY composer.lock composer.lock RUN composer install \ --ignore-platform-reqs \ --no-interaction \ --no-plugins \ --no-scripts \ --prefer-dist FROM php:7.4-fpm-alpine COPY . /var/www/html WORKDIR /var/www/html COPY . . COPY --from=vendor /app/vendor ./vendor/ COPY ./docker/php/php.ini:/usr/local/etc/php/php.ini RUN apk add --no-cache \ oniguruma-dev \ mysql-client \ libxml2-dev \ # If you have enabled gd plugin # libpng-dev \ # libjpeg-turbo-dev \ # freetype-dev \ git \ zip \ unzip \ curl RUN docker-php-ext-install \ bcmath \ mbstring \ pdo \ pdo_mysql \ tokenizer \ xml # If you need to work with image manipulation. # RUN docker-php-ext-configure gd --with-freetype --with-jpeg # RUN docker-php-ext-install gd RUN adduser www-data www-data RUN chown -R www-data:www-data . USER www-data EXPOSE 9000 CMD ["php-fpm"]
故障原因
你的docker-compose.yml中没有定义名为php的服务,承载PHP运行环境(php-fpm)的服务被命名为app。执行artisan命令时如果沿用旧配置里的php服务名,docker-compose找不到对应运行中的容器,就会抛出该错误。
Web访问正常是因为nginx配置中正确关联了名为app的php-fpm服务,不依赖php这个服务名。
解决方法
二选一即可:
- 执行artisan命令时指定正确的服务名
app,命令格式如下:
例如执行数据库迁移:docker-compose exec app php artisan <你的artisan子命令>docker-compose exec app php artisan migrate - 如果习惯使用
php作为PHP服务的标识,可以修改docker-compose.yml,将原app:服务名修改为php:,同时把server服务配置块里links字段下的- app也同步改为- php,修改完成后执行docker-compose up -d重建容器生效,之后就可以用docker-compose exec php php artisan <子命令>的格式执行操作。
内容的提问来源于stack exchange,提问作者rzak
相关产品推荐
相关产品推荐

