如何将python s3fs客户端连接到正在运行的Minio docker容器?



出于测试目的,我试图连接一个模块,该模块在s3fs上引入一个具有自定义业务逻辑的抽象层。

似乎我有麻烦连接s3fs客户端到Minio容器。下面是我创建容器和附加s3fs客户机的方法(下面描述了我如何验证容器是否正常运行)

import s3fs
import docker
client = docker.from_env()
container = client.containers.run('minio/minio',
"server /data --console-address ':9090'",
environment={
"MINIO_ACCESS_KEY": "minio",
"MINIO_SECRET_KEY": "minio123",
},
ports={
"9000/tcp": 9000,
"9090/tcp": 9090,
},
volumes={'/tmp/minio': {'bind': '/data', 'mode': 'rw'}},
detach=True)
container.reload() # why reload:  https://github.com/docker/docker-py/issues/2681
fs = s3fs.S3FileSystem(
anon=False,
key='minio',
secret='minio123',
use_ssl=False,
client_kwargs={
'endpoint_url': "http://localhost:9000" # tried 127.0.0.1:9000 with no success
}
)
===========
>>> fs.ls('/')
[]
>>> fs.ls('/data')
Bucket doesnt exists exception

检查容器是否在运行:

➜  ~ docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS          PORTS                                                                                  NAMES
127e22c19a65   minio/minio   "/usr/bin/docker-ent…"   56 seconds ago   Up 55 seconds   0.0.0.0:9000->9000/tcp, :::9000->9000/tcp, 0.0.0.0:9090->9090/tcp, :::9090->9090/tcp   hardcore_ride

检查相关卷是否已挂载:

➜  ~ docker exec -it 127e22c19a65 bash
[root@127e22c19a65 /]# ls -l /data/
total 4
-rw-rw-r-- 1 1000 1000 4 Jan 11 16:02 foo.txt
[root@127e22c19a65 /]# exit

由于我通过装入容器来证明卷绑定工作正常,因此我希望通过s3fs客户机附加容器的文件系统时看到相同的结果。

作为此设置的一部分创建的桶名是什么?

从文档中我看到你必须给<bucket_name>/<object_path>语法来访问资源。

fs.ls('my-bucket')
['my-file.txt']

如果你看一下下面的文档,还有一些其他的方法可以使用fs.open访问它,你能试一下吗?

https://buildmedia.readthedocs.org/media/pdf/s3fs/latest/s3fs.pdf

最新更新