laravel / sail

Docker files for running a basic Laravel application.
https://laravel.com/docs/sail
MIT License
1.68k stars 476 forks source link

SQLSTATE[08006] [7] could not send SSL negotiation packet: Resource temporarily unavailable #705

Closed stefblokdijk closed 3 months ago

stefblokdijk commented 3 months ago

Sail Version

1.30.2

Laravel Version

11.16.0

PHP Version

8.3.9

Operating System

macOS

OS Version

14.5

Description

I haven't touched this project in a while, so when I installed everything again I was met with the following error when trying to execute a Redshift query from Sail (locally): SQLSTATE[08006] [7] could not send SSL negotiation packet: Resource temporarily unavailable. No changes have been made to the project, database or AWS security settings.

However it does work when executing the any query using php artisan serve instead of sail up.

The following Github issue might be related to this: https://github.com/php/php-src/issues/14665

Steps To Reproduce

docker-compose.yml

version: '3'
services:
    [REDACTED].test:
        build:
            context: ./vendor/laravel/sail/runtimes/8.3
            dockerfile: Dockerfile
            args:
                WWWGROUP: '${WWWGROUP}'
        image: sail-8.3/app
        extra_hosts:
            - 'host.docker.internal:host-gateway'
        ports:
            - '${APP_PORT:-80}:80'
            - '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
        environment:
            WWWUSER: '${WWWUSER}'
            LARAVEL_SAIL: 1
            XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
            XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
        volumes:
            - '.:/var/www/html'
        networks:
            - sail
        depends_on:
            - mysql
            - redis
    mysql:
        image: 'mysql/mysql-server:8.0'
        ports:
            - '${FORWARD_DB_PORT:-3306}:3306'
        environment:
            MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ROOT_HOST: '%'
            MYSQL_DATABASE: '${DB_DATABASE}'
            MYSQL_USER: '${DB_USERNAME}'
            MYSQL_PASSWORD: '${DB_PASSWORD}'
            MYSQL_ALLOW_EMPTY_PASSWORD: 1
        volumes:
            - 'sail-mysql:/var/lib/mysql'
            - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
        networks:
            - sail
        healthcheck:
            test:
                - CMD
                - mysqladmin
                - ping
                - '-p${DB_PASSWORD}'
            retries: 3
            timeout: 5s
    redis:
        image: 'redis:alpine'
        ports:
            - '${FORWARD_REDIS_PORT:-6379}:6379'
        volumes:
            - 'sail-redis:/data'
        networks:
            - sail
        healthcheck:
            test:
                - CMD
                - redis-cli
                - ping
            retries: 3
            timeout: 5s
networks:
    sail:
        driver: bridge
volumes:
    sail-mysql:
        driver: local
    sail-redis:
        driver: local

config/database.php connection

'redshift' => [
    'driver' => 'pgsql',
    'host' => env('REDSHIFT_HOST', ''),
    'port' => env('REDSHIFT_PORT', ''),
    'database' => env('REDSHIFT_DATABASE', ''),
    'username' => env('REDSHIFT_USER', ''),
    'password' => env('REDSHIFT_PASSWORD', ''),
    'charset' => 'utf8',
    'prefix' => '',
    'search_path' => 'public',
    'sslmode' => 'prefer',
],

Example query

$test = DB::connection('redshift')
    ->table('example')
    ->count();
driesvints commented 3 months ago

this is most likely a temporary hiccup.

stefblokdijk commented 3 months ago

Hi @driesvints, i'm actually still experiencing this. The thumbs up on my post makes it seem like i'm not the only one having this problem.

stefblokdijk commented 3 months ago

I've done some more research and found that the temporary solution is to uninstall swoole which worked on 2 projects that connect to AWS Redshift.

I use php 8.3, so these were the required steps:

  1. Enter the CLI: sail root-shell
  2. Remove swoole: apt remove php8.3-swoole
  3. Restart sail

Here's the information I found:

The swoole fix was released in version v6.0.0-alpha but I wasn't able to install that via apt. I think this should eventually be addressed in sail itself since php8.3-swoole is being installed when setting up sail.

pedrovian4 commented 2 months ago

I've solved this issue here

https://github.com/laravel/sail/pull/715

gaborm74 commented 1 month ago

Ondřej updated the php-swoole extension package to the 5.1.4 swoole src release that contains the fix php8.1-swoole/now 6.0.0+really+5.1.4-1+ubuntu22.04.1+deb.sury.org+1 amd64 so everyone can rebuild their sail container image and the SSL issue is no more without force removing the extension

https://github.com/oerdnj/deb.sury.org/issues/2205 https://github.com/swoole/swoole-src/releases/tag/v5.1.4