nginx 从Docker容器内部和外部访问minio对象预定义的get URL

vkc1a9a2  于 2023-01-16  发布在  Nginx
关注(0)|答案(2)|浏览(465)

我使用了下面的docker-compose.yml文件来部署FastAPI、MongoDB、Minio docker容器。

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

从FastAPI内部,我可以使用minio:9000端点连接到minio示例。API为请求的minio对象返回 get_presigned_url 的输出,但URL的格式为 *http://minio:9000/imaging/images/30 d12 c89... *,我无法从Docker容器外部访问该格式。
我找到了一个快速修复/解决方法来解决这个问题,即将此行添加到 /etc/hosts 文件中即可

127.0.0.1       minio

但在我看来,这是一个廉价的解决方案,主机必须修改他/她的机器。
我觉得在Docker容器中添加nginx代理可以很容易地解决这个问题,但是我不知道该怎么做?
如果您能建议使用nginx配置设置来解决这个问题,或者任何其他建议也是受欢迎的,这将是很有帮助的。

kkih6yb8

kkih6yb81#

您可以尝试通过Docker端口转发(网络)或请参阅指南:https://docs.min.io/docs/setup-nginx-proxy-with-minio

wlzqhblo

wlzqhblo2#

您可以使用另一个地址进行签名(例如,localhost:9000从您的计算机网络访问它)。然后,您可以将代理应用到Minio客户端,以便它向Docker网络中的容器发出实际请求。
我已经设法与下面的代码(在dotnet的例子):

MinioClient client = new MinioClient()
    .WithEndpoint("localhost:9000")
    .WithCredentials('----', '-----')
    .WithProxy(new WebProxy('minio', 9000)) // configuring proxy here
    .WithSSL(false)
    .Build();

相关问题