Herunterladen von Dateien aus dem S3 mit boto3 innen Docker schlägt fehl
Diese ist zu Versagen, wenn ich es innerhalb eines Docker-container, aber funktioniert einwandfrei wenn ich es in ein virtualenv in OS X. keine Ahnung, was könnte schief gehen? Gibt es irgendwelche bekannten Probleme mit Docker+boto?
>>> import boto3
>>> s3 = boto3.client('s3')
>>> s3.download_file("mybucket", "myfile.txt", "myfile2.txt")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/opt/conda/lib/python2.7/site-packages/boto3/s3/inject.py", line 104, in download_file
extra_args=ExtraArgs, callback=Callback)
File "/opt/conda/lib/python2.7/site-packages/boto3/s3/transfer.py", line 666, in download_file
object_size = self._object_size(bucket, key, extra_args)
File "/opt/conda/lib/python2.7/site-packages/boto3/s3/transfer.py", line 729, in _object_size
Bucket=bucket, Key=key, **extra_args)['ContentLength']
File "/opt/conda/lib/python2.7/site-packages/botocore/client.py", line 258, in _api_call
return self._make_api_call(operation_name, kwargs)
File "/opt/conda/lib/python2.7/site-packages/botocore/client.py", line 548, in _make_api_call
raise ClientError(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (403) when calling the HeadObject operation: Forbidden
InformationsquelleAutor Evan Zamir | 2016-05-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Blick auf die Fehler:
An error occurred (403) when calling the HeadObject operation: Forbidden
Finden Sie die Anmeldeinformationen, aber es hat nicht die Berechtigung zum Zugriff auf den Eimer. Bottom line: Aktualisieren Sie Ihre IAM-Berechtigungen enthalten
s3:ListBucket
Erlaubnis für Ihre Eimer:arn:aws:s3:::mybucket/*
oder einfach die PolitikAmazonS3ReadOnlyAccess
um Ihre IAM-Benutzer/Rolle.Können Sie versuchen, diese und sehen, druckt es die richtigen Anmeldeinformationen:
Es hat nichts zu tun mit Docker. Wenn Sie die Anmeldeinformationen auf dem Mac, sollte es auf Docker zu. Meine Vermutung ist, dass die Anmeldeinformationen sind unterschiedlich. Verwenden Sie das code-snippet, das ich gepostet, und prüfen Sie, ob Sie sehen, die gleichen Anmeldeinformationen, die Mac-und Hafenarbeiter.
Es ist exakt das gleiche Anmeldeinformationen. 🙁
hast du am Ende das finden der Lösung ?
InformationsquelleAutor helloV
Ich denke, Sie sind nicht die Einstellung der korrekten Umgebungsvariablen. Verwenden
env
zu überprüfen, was ist auf Ihrem host und ähnliches set von Variablen innerhalb des Containers oder übergeben Sie durch mit-e
zudocker run
.Edit: Da Sie angegeben haben, in Ihren Kommentaren, dass Sie mit einer credentials-Datei übergeben, die in den Behälter mit
-v ~/.aws/credentials:/root/.aws/credentials
. Dies setzt Voraus, dass ein ordnungsgemäßerHOME
eingestellt ist und Sie dieroot
Benutzer. Einige Bilder, die dies nicht getan haben, und Sie müssen, um es in den root-Ordner auf/.aws/credentials
.Wenn Sie einen bestimmten Benutzer, der Pfad muss in seinem home-Ordner.
Dann übergeben Sie es in den Behälter mit
-v ~/.aws/credentials:/root/.aws/credentials
.Es ist schon im container. Nicht boto soll Lesen können?
Ähm ok 🙂 ja, boto sollten es Lesen. Möglicherweise müssen Sie ein paar Pfade. Versuchen Sie, ihn in
/.aws
und/root/.aws
. Wenn Sie Ihren container ist mit einem anderen Benutzer, überprüfen Sie seinen home-Ordner.Welp, zog ich die Berechtigung die Datei überall, wo ich denken konnte, und es half nicht. Ich habe dann definiert, die env-Variablen nicht funktioniert hat. Dann habe ich die aws konfigurieren. Kein Glück. Schließlich habe ich versucht, die Weitergabe der Anmeldeinformationen auf dem client () - Funktion. Noch immer die gleichen Fehler. Im Grunde alles, was hier vorgeschlagen: boto3.readthedocs.io/de/latest/guide/...
InformationsquelleAutor ZeissS
Was das Problem für mich war, zu installieren awscli auf meinen container und update boto3 > 1.4
InformationsquelleAutor Nicolas