Nio*_*Nio 6 amazon-s3 laravel docker minio
我有以下内容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
Run Code Online (Sandbox Code Playgroud)
如您所见,我使用 minio 作为 AWS S3 兼容存储。这很有效,但是当我为文件 ( Storage::disk('s3')->url('some-file.txt'))生成 url 时,显然我得到了这样的 url http://s3:9000/Bucket/some-file.txt,它在 Docker 网络之外不起作用。
我已经尝试设置AWS_ENDPOINT为http://127.0.0.1:9000但随后 Laravel 无法连接到 Minio 服务器...
有没有办法配置 Docker/Laravel/Minio 来生成可在 Docker 网络内外访问的 URL?
我扩展了这个问题中的解决方案,创建了一个在本地主机和具有可访问 DNS 的服务器上都适用的解决方案。
localhost 解决方案本质上就是上面描述的解决方案。
sudo echo "127.0.0.1 my-minio-localhost-alias" >> /etc/hosts
Run Code Online (Sandbox Code Playgroud)
export HOSTNAME=my-minio-localhost-alias
Run Code Online (Sandbox Code Playgroud)
Hello from Minio!
Run Code Online (Sandbox Code Playgroud)
该撰写文件包含以下容器:
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:
Run Code Online (Sandbox Code Playgroud)
docker-compose up -d minio
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
docker-compose run s3-client --endpoint-url http://${HOSTNAME}:9000 s3 presign s3://my-bucket/hello.txt
Run Code Online (Sandbox Code Playgroud)
绑定地址怎么样?(未测试)
...
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 --address 0.0.0.0:9000 /data
Run Code Online (Sandbox Code Playgroud)
由于您将主机上的 9000 端口映射到该服务,因此如果您只需将 s3 添加到您的主机文件(Mac/Linux 上的 /etc/hosts),您应该能够通过 s3:9000 访问它
将其添加127.0.0.1 s3到您的主机文件中,您应该能够使用https://s3:9000/path/to/file从主机访问 s3 容器
这意味着您可以从 docker 网络内部和外部使用 s3 主机名
| 归档时间: |
|
| 查看次数: |
15733 次 |
| 最近记录: |