accessing the minio object presigned get URL both from inside and outside docker container
Asked Answered
S

2

10

I used the following docker-compose.yml file to deploy a FastAPI, MongoDB, Minio docker containers.

version: '3.7'
services: 
  db:
    image: mongo:latest
    container_name: mongodb
    user: 1000:1000
    volumes: 
      - /home/krishna/mongodb/db:/data/db

  minio:
    image: minio/minio:latest
    container_name: minio
    command: server /data --console-address ":9001"
    ports:
      - 9000:9000
      - 9001:9001
    volumes:
      - /data:/data

  app:
    build: .
    container_name: imaging_container
    ports:
      - 8888:8888

From inside the FastAPI, I am able to connect to the minio instance using minio:9000 endpoint. API returns the output of get_presigned_url for a requested minio object but the url is in the form of http://minio:9000/imaging/images/30d12c89... which I am not able to access from outside the docker container.

I found a quickfix/workaround to resolve this i.e. adding this line to /etc/hosts file works

127.0.0.1       minio

But this looks to me a cheap solution where host has to modify his/her machine.

I feel like this can be resolved easily by adding nginx proxy to the docker container. But I am not sure how to go about doing that?

It would be helpful if you can suggest the nginx configuration setup to resolve this, or alternatively any other suggestions are also welcome.

Satisfactory answered 22/8, 2021 at 9:12 Comment(0)
F
2

You could use another address for signing (for example, localhost:9000 to access it from your computer's network). And then, you could apply proxy to the Minio client, so that it would make the actual request to the container in the docker network.

I have managed it to work with the following code (example in dotnet):

MinioClient client = new MinioClient()
    .WithEndpoint("localhost:9000")
    .WithCredentials('----', '-----')
    .WithProxy(new WebProxy('minio', 9000)) // configuring proxy here
    .WithSSL(false)
    .Build();
Falco answered 16/1, 2023 at 2:3 Comment(0)
B
1

You can try exposing port through docker port fowarding (network) or Please have a look at the guides: https://docs.min.io/docs/setup-nginx-proxy-with-minio

Broke answered 25/8, 2021 at 14:56 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.