首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker-compose:如何在docker网络内外使用minio

docker-compose:如何在docker网络内外使用minio
EN

Stack Overflow用户
提问于 2019-06-17 16:23:57
回答 5查看 19.2K关注 0票数 8

我使用以下docker-compose.yml为我的Laravel应用程序运行本地环境。

代码语言:javascript
复制
version: '3'
services:
  app:
    build:
      context: .
      dockerfile: .docker/php/Dockerfile
    ports:
      - 80:80
      - 443:443
    volumes:
      - .:/var/www:delegated
    environment:
      AWS_ACCESS_KEY_ID: minio_access_key
      AWS_SECRET_ACCESS_KEY: minio_secret_key
      AWS_BUCKET: Bucket
      AWS_ENDPOINT: http://s3:9000
    links:
      - database
      - s3
  database:
    image: mariadb:10.3
    ports:
      - 63306:3306
    environment:
      MYSQL_ROOT_PASSWORD: secret
  s3:
    image: minio/minio
    ports:
      - "9000:9000"
    volumes:
      - ./storage/minio:/data
    environment:
      MINIO_ACCESS_KEY: minio_access_key
      MINIO_SECRET_KEY: minio_secret_key
    command: server /data

如您所见,我使用minio作为与亚马逊网络服务S3兼容的存储。这很好用,但是当我为一个文件生成一个url (Storage::disk('s3')->url('some-file.txt'))时,显然我得到了一个像这样的http://s3:9000/Bucket/some-file.txt,它在Docker网络之外不能工作。

我已经尝试将AWS_ENDPOINT设置为http://127.0.0.1:9000,但是Laravel无法连接到Minio服务器...

有没有办法配置Docker / Laravel / Minio来生成在Docker网络内外都可以访问的urls?

EN

回答 5

Stack Overflow用户

发布于 2020-04-15 02:17:46

我对这个问题中的解决方案进行了扩展,创建了一个在本地主机和具有可访问dns的服务器上都适用的解决方案。

本地主机解决方案本质上就是上面描述的解决方案。

创建localhost主机映射

代码语言:javascript
复制
sudo echo "127.0.0.1       my-minio-localhost-alias" >> /etc/hosts

设置主机名,使用'my-minio- localhost -alias‘作为localhost

代码语言:javascript
复制
export HOSTNAME=my-minio-localhost-alias

创建hello.txt

代码语言:javascript
复制
Hello from Minio!

创建docker-compose.yml

此合成文件包含以下容器:

minio service

  • minio-mc:命令行工具,用于初始化content

  • s3-client:命令行工具,用于生成预签名urls

代码语言:javascript
复制
version: '3.7'
networks:
  mynet:
services:
  minio:
    container_name: minio
    image: minio/minio
    ports:
    - published: 9000
      target: 9000
    command: server /data
    networks:
      mynet:
        aliases:
        # For localhost access, add the following to your /etc/hosts
        # 127.0.0.1       my-minio-localhost-alias
        # When accessing the minio container on a server with an accessible dns, use the following
        - ${HOSTNAME}
  # When initializing the minio container for the first time, you will need to create an initial bucket named my-bucket.
  minio-mc:
    container_name: minio-mc
    image: minio/mc
    depends_on:
    - minio
    volumes:
    - "./hello.txt:/tmp/hello.txt"
    networks:
      mynet:
  s3-client:
    container_name: s3-client
    image: amazon/aws-cli
    environment:
      AWS_ACCESS_KEY_ID: minioadmin
      AWS_SECRET_ACCESS_KEY: minioadmin
    depends_on:
    - minio
    networks:
      mynet:

启动minio容器

代码语言:javascript
复制
docker-compose up -d minio

在minio中创建bucket并加载文件

代码语言:javascript
复制
docker-compose run minio-mc mc config host add docker http://minio:9000 minioadmin minioadmin
docker-compose run minio-mc mb docker/my-bucket
docker-compose run minio-mc mc cp /tmp/hello.txt docker/my-bucket/foo.txt

创建可在扩展底座网络内部和外部访问的预签名URL

代码语言:javascript
复制
docker-compose run s3-client --endpoint-url http://${HOSTNAME}:9000 s3 presign s3://my-bucket/hello.txt
票数 2
EN

Stack Overflow用户

发布于 2019-06-17 18:22:20

由于您将主机上的9000端口映射到该服务,因此只要将s3添加到主机文件(Mac/Linux上的/etc/ hosts ),就应该能够通过s3:9000访问它

将此127.0.0.1 s3添加到主机文件中,您应该能够使用https://s3:9000/path/to/file从主机访问s3容器

这意味着您可以从扩展底座网络内部和外部使用s3主机名

票数 1
EN

Stack Overflow用户

发布于 2021-12-01 13:00:08

我没有找到使用docker-compose的minio的完整设置。这就是它:

代码语言:javascript
复制
version: '2.4'

services:
  s3:
    image: minio/minio:latest
    ports:
      - "9000:9000"
      - "9099:9099"
    environment:
      MINIO_ROOT_USER: minioadmin
      MINIO_ROOT_PASSWORD: minioadmin
    volumes:
      - storage-minio:/data
    command: server --address ":9099" --console-address ":9000" /data
    restart: always # necessary since it's failing to start sometimes

volumes:
  storage-minio:
    external: true

在命令部分,我们有地址,这是的API地址,还有console-address,你可以在这里连接到控制台,见下图。使用MINIO_ROOT_USERMINIO_ROOT_PASSWORD值进行登录。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56627446

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档