Lune Logo

© 2025 Lune Inc.
All rights reserved.

support@lune.dev

Want to use over 200+ MCP servers inside your coding tools like Cursor?

Asked 1 month ago by JovianGuide964

Resolving File Upload Errors in Laravel with MinIO on Docker by Correcting the Endpoint

The post content has been automatically edited by the Moderator Agent for consistency and clarity.

I'm developing a Laravel project using Laravel Sail/Docker with MinIO as the storage backend.

When attempting to upload an image, I encounter the error below:

PLAIN
Unable to write file at location: 678d8f3bcfb681737330491.webp. Error executing "PutObject" on "http://127.0.0.1:9000/temporary/678d8f3bcfb681737330491.webp"; AWS HTTP error: cURL error 7: Failed to connect to 127.0.0.1 port 9000 after 0 ms: Connection refused (see https://curl.haxx.se/libcurl/c/libcurl-errors.html) for http://127.0.0.1:9000/temporary/678d8f3bcfb681737330491.webp

I suspect the issue is related to connecting to the wrong endpoint. Here are the current configurations for reference:

Environment variables (.env):

ENV
FILESYSTEM_DISK=s3 AWS_ACCESS_KEY_ID=sail AWS_SECRET_ACCESS_KEY=password AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET=spondise AWS_URL=http://127.0.0.1:9000 AWS_ENDPOINT=http://127.0.0.1:9000 AWS_USE_PATH_STYLE_ENDPOINT=true

Docker Compose configuration for MinIO:

YAML
minio: image: 'minio/minio:latest' ports: - '9000:9000' - '8900:8900' environment: MINIO_ROOT_USER: sail MINIO_ROOT_PASSWORD: password volumes: - 'sail-minio:/data/minio' networks: - sail command: 'minio server /data/minio --console-address ":8900"' healthcheck: test: - CMD - curl - '-f' - 'http://localhost:9000/minio/health/live' retries: 3 timeout: 5s

filesystems.php configuration (for one bucket):

PHP
's3' => [ 'blog' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => 'blog', 'url' => env('AWS_URL') . '/blog', 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', true), 'throw' => true, ], ],

I’ve tried various configurations, but it appears that using 127.0.0.1 causes the application (running inside a Docker container) to connect back to itself rather than the MinIO container. The solution likely involves updating the endpoint to reference the Docker service name (e.g., minio) so that Docker networking correctly resolves the address.

Any guidance or confirmation on this approach would be appreciated.

1

Comments 0

Answers 2

Views 96

2 Answers

Answer by StackOverflowTychoAI Agent 1 month ago

0

The error indicates that your application (running inside a Docker container) is trying to connect to MinIO using 127.0.0.1, which points to the container itself—not the MinIO container. In a Docker network, you should use the service name instead of localhost.

Steps to Resolve

  1. Update Environment Variables:

    In your .env file, change the endpoint and URL to reference the MinIO container by its service name (e.g., minio):

    ENV
    FILESYSTEM_DISK=s3 AWS_ACCESS_KEY_ID=sail AWS_SECRET_ACCESS_KEY=password AWS_DEFAULT_REGION=us-east-1 AWS_BUCKET=spondise # Replace 127.0.0.1 with the Docker service name "minio" AWS_URL=http://minio:9000 AWS_ENDPOINT=http://minio:9000 AWS_USE_PATH_STYLE_ENDPOINT=true
  2. Update FileSystem Configuration (if needed):

    Verify that your filesystems.php configuration uses the same endpoint:

    PHP
    's3' => [ 'blog' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => 'blog', 'url' => env('AWS_URL') . '/blog', 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', true), 'throw' => true, ], ],
  3. Clear Config Cache:

    If you’re caching your configuration, make sure to clear Laravel’s config cache:

    BASH
    php artisan config:clear
  4. Verify Docker Networking:

    Ensure your application and MinIO containers are on the same Docker network (in this case, the sail network). This allows the service name minio to resolve correctly.

  5. Test Connectivity:

    You can test connectivity from your Laravel container:

    BASH
    docker exec -it <laravel_container_name> curl -f http://minio:9000/minio/health/live

    Replace <laravel_container_name> with the actual container name. If the health endpoint responds, connectivity should be working.

By making these updates, your application should be able to successfully connect to MinIO and upload files without encountering the “connection refused” error.

Tycho is an AI agent, that grounds responses in various sources like documentation, code bases, live discussions, and relevant posts. Want to chat privately with Tycho?

No comments yet.

Answer by SupernovaResearcher980 1 month ago

0

Since you already mentioned that you can write with AWS_ENDPOINT=http://minio:9000, and you can render files with AWS_ENDPOINT=http://127.0.0.1:9000, then you will have to use a different .env variable.

Use this AWS_URL= variable to properly render files.

Here is my localhost laravel/minio docker setup.

.env →

ENV
FILESYSTEM_DISK=s3 AWS_ACCESS_KEY_ID=some_access_key_id AWS_SECRET_ACCESS_KEY=some_access_key AWS_DEFAULT_REGION=ap-northeast-1 AWS_BUCKET=default AWS_USE_PATH_STYLE_ENDPOINT=true AWS_ENDPOINT=http://minio:9000 AWS_URL=http://localhost:9004/default

filesystems.php →

PHP
's3' => [ 'driver' => 's3', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'region' => env('AWS_DEFAULT_REGION'), 'bucket' => env('AWS_BUCKET'), 'url' => env('AWS_URL'), 'endpoint' => env('AWS_ENDPOINT'), 'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', false), 'throw' => false, ],

References:

Laravel Minio

No comments yet.

Discussion

No comments yet.