我使用以下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_ENDPOINT
设置为http://127.0.0.1:9000,但Laravel无法连接到Minio服务器...
有没有办法配置Docker / Laravel / Minio来生成可以在Docker网络内外访问的URL?
7条答案
按热度按时间5ssjco0h1#
如何绑定地址?(未测试)
oug3syen2#
我扩展了这个问题中的解决方案,创建了一个既适用于本地主机又适用于具有可访问dns的服务器的解决方案。
localhost解决方案本质上就是上面描述的解决方案。
创建localhost主机Map
设置主机名,对本地主机使用“my-minio-localhost-alias”
创建hello.txt文件
创建停靠合成.yml
此合成文件包含以下容器:
启动迷你容器
在minio中创建存储桶并加载文件
创建可在Docker网络内外访问的预签名URL
jobtbby33#
由于您要将主机上的9000端口Map到该服务,因此如果您只是将s3添加到hosts文件(Mac/Linux上的/etc/hosts)中,您应该能够通过s3:9000访问它
将此
127.0.0.1 s3
添加到hosts文件中,您应该能够使用https://s3:9000/path/to/file从主机访问s3容器这意味着您可以从Docker网络内部和外部使用s3主机名
nwwlzxa74#
我没有找到一个完整的minio设置使用码头组成.这里是:
在命令部分中,我们有address,这是API地址,我们有console-address,您可以在其中连接到控制台,请参见下图。使用
MINIO_ROOT_USER
和MINIO_ROOT_PASSWORD
值登录。42fyovps5#
将别名“s3”添加到我的本地主机文件中并没有达到这个目的,但是显式地将端口绑定到127.0.0.1就像一个魔咒:
lrl1mhuk6#
您可以使用另一个地址进行签名(例如,localhost:9000从您的计算机网络访问它),然后,您可以将代理应用到Minio客户端,以便它可以向Docker网络中的容器发出实际请求。
我已经设法与下面的代码(在dotnet的例子):
qij5mzcb7#
对于那些正在寻找s3与minio对象服务器集成测试的人。特别是JAVA实现。
驳接合成文件:
实际的集成测试类: