dorgan

dorgan

{:error, :econnrefused} with ExAws.S3 and local Minio

Hi,

I’m setting up a dev environment for my current project using docker-compose. Everything works fine.

I added an S3 service using minio/minio image so I don’t hit the production S3 server while testing stuff. It seems to work too, as I can see the dashboard and upload files through it.

But I’m failing to make it work with ExAws. Whenever I try to upload a file like:

file_path
  |> ExAws.S3.Upload.stream_file()
  |> ExAws.S3.upload(bucket(), path, opts)
  |> ExAws.request()

It fails with {:error, :econnrefused}

ExAws is configured as:

config :ex_aws,
  debug_requests: true,
  region: "local"

config :ex_aws, :s3, %{
  access_key_id: "minioadmin",
  secret_access_key: "minioadmin",
  scheme: "http://",
  host: "localhost",
  port: 5000,
  region: "local",
  bucket: "uploads"
}

And it logs:

app_1     | [debug] Request URL: "http://localhost:5000/uploads/uploads/media/8de8a3a0-37d8-4da5-9a5b-c371223be9ff.gif?uploads=1"
app_1     | [debug] Request HEADERS: [{"Authorization", "AWS4-HMAC-SHA256 Credential=minioadmin/20200920/local/s3/aws4_request,SignedHeaders=content-length;content-type;host;x-amz-acl;x-amz-content-sha256;x-amz-date,Signature=93d180c17e16ca812fc0200e038ce9e4a13ec43fc8d995072a4ee28557b615fd"}, {"host", "localhost:5000"}, {"x-amz-date", "20200920T171910Z"}, {"content-length", 0}, {"content-type", "image/gif"}, {"x-amz-acl", "public-read"}, {"x-amz-content-sha256", "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"}]
app_1     | [debug] Request BODY: ""
app_1     | [warn] ExAws: HTTP ERROR: :econnrefused

IO.inspecting the request:

app_1     | %ExAws.S3.Upload{
app_1     |   bucket: "uploads",
app_1     |   opts: [acl: :public_read, content_type: "image/gif"],
app_1     |   path: "uploads/media/8de8a3a0-37d8-4da5-9a5b-c371223be9ff.gif",
app_1     |   service: :s3,
app_1     |   src: %File.Stream{
app_1     |     line_or_bytes: 5242880,
app_1     |     modes: [:raw, :read_ahead, :binary],
app_1     |     path: "/tmp/plug-1600/multipart-1600622348-348284052294283-2.gif",
app_1     |     raw: true
app_1     |   },
app_1     |   upload_id: nil
app_1     | }

and the docker-compose.yml service:

  s3:
    image: minio/minio
    ports:
      - "5000:9000"
    volumes:
      - "s3:/data"
    environment:
      MINIO_ACCESS_KEY: "minioadmin"
      MINIO_SECRET_KEY: "minioadmin"
    command: server /data

With the same code, it is running fine in production with DigitalOcean Spaces(no docker though), so I believe it has todo with the way things are configured here, but what can it be?

Marked As Solved

dorgan

dorgan

The issue was that I was configuring ExAws to use the port exposed by docker, but I needed to use the port in the docker network, which is 9000, not 5000, also the host should be the same name as the service, that is s3, not localhost

Last Post!

ambareesha7

ambareesha7

thank you very much

Where Next?

Popular in Questions Top

hariharasudhan94
Lets say I have map like this fetching from my database %{"_id" => #BSON.ObjectId<58eb1a7a9ad169198c3dXXXX>, "email" => ...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
ashish173
I am using Ecto timestamps with postgres, I can see the timestamps() use the :naive_dateime but for my use case I wanted to store the ti...
New
joeerl
Hello again - after a longish gap I’ve decided I really must dig into Elixir and see what’s been happening here - so I have a few questio...
New
sen
Hi All, I set a environment variables in dev.exs , like below code. when i start server, how can i set the ${enable} value? thanks. d...
New
alice
Hey, Just curious what are the main benefits of Elixir compared to Clojure? When is Elixir more useful than Clojure and vice versa? Th...
New
pmjoe
I have a relationship of love and hate with Elixir. Lots of things are just absolutely right, but there are some things that are kind of ...
New

Other popular topics Top

minhajuddin
I have seen a lot of code which picks the first element from a list using Enum.at(0) instead of List.first. Is there a reason why people ...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New
aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
985 44532 311
New
WestKeys
Currently suffering from paralysis by [HTTP client] analysis. This is rather unusual in Elixirland as there tends to be consensus on the ...
New
sergio
Kind of like when jquery came out, it was super necessary. Existing drag and drop libraries have a bunch of baggage to support old browse...
New

We're in Beta

About us Mission Statement