Php 503“;“服务不可用”;Docker容器与Laravel 8在Google云中的应用
我正试图在谷歌云中运行Laravel8(带数据库!)。部署通过使用GitHub CI触发器的云运行完成 到目前为止我所做的: 我创建了所有必要的Docker文件,用于构建Docker映像和容器,如我的应用程序文档根目录中的Dockerfile和Docker-composer.yml。 因为我的应用程序需要一个后端和一个数据库,所以我创建了一个nginx.conf-file和一个int_db.sql文件来为数据库种子 DockerfilePhp 503“;“服务不可用”;Docker容器与Laravel 8在Google云中的应用,php,laravel,docker,google-cloud-platform,google-cloud-run,Php,Laravel,Docker,Google Cloud Platform,Google Cloud Run,我正试图在谷歌云中运行Laravel8(带数据库!)。部署通过使用GitHub CI触发器的云运行完成 到目前为止我所做的: 我创建了所有必要的Docker文件,用于构建Docker映像和容器,如我的应用程序文档根目录中的Dockerfile和Docker-composer.yml。 因为我的应用程序需要一个后端和一个数据库,所以我创建了一个nginx.conf-file和一个int_db.sql文件来为数据库种子 Dockerfile FROM php:7.4-fpm # Arguments
FROM php:7.4-fpm
# Arguments defined in docker-compose.yml
ARG user=hannes
ARG uid=1002
# Install system dependencies
RUN apt-get update && apt-get install -y \
git \
curl \
libpng-dev \
libonig-dev \
libxml2-dev \
zip \
unzip
# Clear cache
RUN apt-get clean && rm -rf /var/lib/apt/lists/*
# Install PHP extensions
RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd
# Get the latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# Create system user to run Composer and Artisan Commands
#RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN useradd -u 1002 -G www-data,root -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
chown -R $user:$user /home/$user
# Set working directory
WORKDIR /var/www
USER $user
docker compose.yml
version: "3.7"
services:
app:
build:
args:
user: hannes
uid: 1002
context: ./
dockerfile: Dockerfile
image: feedbackapp
ports:
- 8080
environment:
# /run/docs/reference/container-contract
PORT: ${PORT:-8080}
K_SERVICE: feedbackapp
K_REVISION: 0
K_CONFIGURATION: feedbackapp
container_name: feedbackapp-container
restart: unless-stopped
working_dir: /var/www/
volumes:
- ./:/var/www
networks:
- feedbackapp
db:
image: mysql:5.7
container_name: feedbackapp-db
restart: unless-stopped
environment:
MYSQL_DATABASE: homestead
MYSQL_ROOT_PASSWORD: homestead
MYSQL_PASSWORD: secret
MYSQL_USER: homestead
SERVICE_TAGS: dev
SERVICE_NAME: mysql
volumes:
- ./docker-compose/mysql:/docker-entrypoint-initdb.d
networks:
- feedbackapp
nginx:
image: nginx:alpine
container_name: feedbackapp-nginx
restart: unless-stopped
ports:
- 8000:80
volumes:
- ./:/var/www
- ./docker-compose/nginx:/etc/nginx/conf.d/
networks:
- feedbackapp
networks:
feedbackapp:
driver: bridge
feedbackapp.conf
server {
listen 80;
index index.php index.html;
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
root /var/www/public;
location ~ \.php$ {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass app:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
}
location / {
try_files $uri $uri/ /index.php?$query_string;
gzip_static on;
}
}
在我的本地Docker环境中,如果我通过请求应用程序,Laravel 8应用程序将成功构建并运行良好http://localhost:8000/.
因此,我在Google Cloud中创建了一个云运行服务,并使用GitHub Repo的CI触发器。所以每次我推我的分支,我的云运行服务就会被触发并构建我的应用程序。
构建已在云构建中成功完成
问题:如果打开应用程序链接,我会收到503服务不可用错误
日志告诉我:
非常感谢您的帮助。注意安全。有一个很大的混乱 云运行需要Dockerfile,并且应该在端口8080上公开正确的HTTP服务 所以docker compose不被Cloud Run使用
谢谢你的回答。我更新了Dockerfile,所以最后一行是:CMD php artisan serve--host=0.0.0.0--port=8080 EXPOSE 8080 Laravel本身正在工作,但Laravel无法连接到数据库。我得到错误“SQLSTATE[HY000][2002]连接被拒绝”。我猜是的,因为没有创建数据库,所以Laravel无法连接到数据库。my.env文件中的主机是“127.0.0.1”。我现在该怎么办?@hannes_rd Cloud Run没有本地数据库。因此,您需要使用公共IP创建一个Coud SQL数据库,然后使用Cloud Run设置“连接”,您需要使用unix套接字文件,而不是127.0.0.1。路径格式为
/cloudsql/INSTANCE\u connection\u NAME
阅读更多信息:谢谢。我使用以下PROD环境的.env参数修复了数据库连接问题:DB\u connection=mysql DB\u SOCKET=/cloudsql/PROJECT\u ID:ZONE:DB\u NAME