gpt4 book ai didi

laravel - docker 组成 : how to use minio in- and outside of the docker network

转载 作者:行者123 更新时间:2023-12-02 17:59:11 26 4
gpt4 key购买 nike

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

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 作为 AWS S3 兼容存储。这很有效,但是当我为文件( Storage::disk('s3')->url('some-file.txt') )生成一个 url 时,显然我得到了这样的 url http://s3:9000/Bucket/some-file.txt这在 Docker 网络之外不起作用。

我已经尝试设置 AWS_ENDPOINThttp://127.0.0.1:9000但是后来 Laravel 无法连接到 Minio 服务器...

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

最佳答案

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

localhost 解决方案本质上就是上面描述的解决方案。

创建 localhost 主机映射

sudo echo "127.0.0.1       my-minio-localhost-alias" >> /etc/hosts

设置 HOSTNAME,对 localhost 使用“my-minio-localhost-alias”
export HOSTNAME=my-minio-localhost-alias

创建 hello.txt
Hello from Minio!

创建 docker-compose.yml

此撰写文件包含以下容器:
  • minio:minio 服务
  • minio-mc:用于初始化内容的命令行工具
  • s3-client:生成预签名网址的命令行工具
  • 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 容器
    docker-compose up -d minio

    在minio中创建一个bucket并加载一个文件
    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

    创建一个可在 docker 网络内部和外部访问的预签名 URL
    docker-compose run s3-client --endpoint-url http://${HOSTNAME}:9000 s3 presign s3://my-bucket/hello.txt

    关于laravel - docker 组成 : how to use minio in- and outside of the docker network,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56627446/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com