python:3.6-stretch
失敗したコードは、 debianベースの Docker コンテナー内で実行されます。これは、Django がファイルを 1 つの Docker ボリュームから別のボリュームに移動するときに発生します。
MacOS 10 でテストすると、エラーなく動作します。ここで、Docker コンテナーは docker-compose で開始され、ローカル マシン上の通常の Docker ボリュームを使用します。
Azure (AKS - Azure 上の Kubernetes) にデプロイされ、ファイルの移動は成功しますが、統計情報のコピーは次のエラーで失敗します。
File "/usr/local/lib/python3.6/site-packages/django/core/files/move.py", line 70, in file_move_safe
copystat(old_file_name, new_file_name)
File "/usr/local/lib/python3.6/shutil.py", line 225, in copystat
_copyxattr(src, dst, follow_symlinks=follow)
File "/usr/local/lib/python3.6/shutil.py", line 157, in _copyxattr
names = os.listxattr(src, follow_symlinks=follow_symlinks)
OSError: [Errno 38] Function not implemented: '/some/path/file.pdf'
Azure のボリュームは、ReadWriteMany
アクセス モードを使用した永続的なボリューム クレームです。
現在、次のcopystat
ように文書化されています。
copystat() が失敗を返すことはありません。
https://docs.python.org/3/library/shutil.html
私の質問は次のとおりです。
- ドキュメントには「失敗を返さない」と書かれているため、これは「バグ」ですか?
- 問題のファイルが移動されているため、このエラーを試してみることができますか (後で統計をコピーしようとして失敗するだけです)。
- これを修正する Azure の設定を変更できますか? (おそらくない)
ここでは、Azure 自体のマシンでいくつかの小さなテストを行います。
root:/media/documents# ls -al
insgesamt 267
drwxrwxrwx 2 1000 1000 0 Jul 31 15:29 .
drwxrwxrwx 2 1000 1000 0 Jul 31 15:29 ..
-rwxrwxrwx 1 1000 1000 136479 Jul 31 16:48 orig.pdf
-rwxrwxrwx 1 1000 1000 136479 Jul 31 15:29 testfile
root:/media/documents# lsattr
--S-----c-jI------- ./orig.pdf
--S-----c-jI------- ./testfile
root:/media/documents# python
Python 3.6.6 (default, Jul 17 2018, 11:12:33)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import shutil
>>> shutil.copystat('orig.pdf', 'testfile')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/shutil.py", line 225, in copystat
_copyxattr(src, dst, follow_symlinks=follow)
File "/usr/local/lib/python3.6/shutil.py", line 157, in _copyxattr
names = os.listxattr(src, follow_symlinks=follow_symlinks)
OSError: [Errno 38] Function not implemented: 'orig.pdf'
>>> shutil.copystat('orig.pdf', 'testfile', follow_symlinks=False)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.6/shutil.py", line 225, in copystat
_copyxattr(src, dst, follow_symlinks=follow)
File "/usr/local/lib/python3.6/shutil.py", line 157, in _copyxattr
names = os.listxattr(src, follow_symlinks=follow_symlinks)
OSError: [Errno 38] Function not implemented: 'orig.pdf'
>>>