ここに記載されているように、Skyfield にダウンロード ディレクトリを指定したいと思います。
http://rhodesmill.org/skyfield/files.html
これが私のスクリプトです:
from skyfield.api import Loader
load = Loader('~/data/skyfield')
# Next line downloads deltat.data, deltat.preds, Leap_Second.dat in ~/data/skyfield
ts = load.timescale()
t = ts.utc(2017,9,13,0,0,0)
stations_url = 'http://celestrak.com/NORAD/elements/stations.txt'
# Next line downloads stations.txt in ~/data/skyfield AND deltat.data, deltat.preds, Leap_Second.dat in $PWD !!!
satellites = load.tle(stations_url)
satellite = satellites['ISS (ZARYA)']
予想される動作 (docker の外では正常に動作します)
3 つの deltat ファイル ( deltat.data、deltat.predsおよびLeap_Second.dat ) は~/data/skyfieldにダウンロードされload.timescale()
、stations.txtは同じ場所にダウンロードされます。load.tle(stations_url)
コンテナで実行したときの動作
3 つの deltat ファイルが 2 回ダウンロードされます。
- 通話時に指定したフォルダに 1 回
load.timescale()
- 呼び出し時に現在のディレクトリで別の時間
load.tle(stations_url)
この時点で既に存在し、現在のディレクトリを汚染するため、これはイライラします。Stations.txtが適切な場所 ( ~/data/skyfield )に配置されることに注意してください。
コンテナーが対話的に実行される場合、exec(open("script.py").read())
Python シェルで呼び出すと、通常の動作が再び得られます。誰でもこの問題を再現できますか? それが python、docker、または skyfield に由来するかどうかを判断するのは困難です。
dockerfile は次の 2 行だけです。
FROM continuumio/anaconda3:latest
RUN conda install -c astropy astroquery && conda install -c anaconda ephem=3.7.6.0 && pip install skyfield
次に(ビルドされたイメージに astro のタグが付けられていると仮定して)次のように実行します。
docker run --rm -w /tmp/working -v $PWD:/tmp/working astro:latest python script.py
出力は次のとおりです (実行前にフォルダーが空である場合)。
[#################################] 100% deltat.data
[#################################] 100% deltat.preds
[#################################] 100% Leap_Second.dat
[#################################] 100% stations.txt
[#################################] 100% deltat.data
[#################################] 100% deltat.preds
[#################################] 100% Leap_Second.dat
編集
docker run に -t を追加しても問題は解決しませんでしたが、問題をよりよく説明するのに役立ちました。github の最近の問題はまったく同じではありませんが、非常に似ているように見えるため、Skyfield から来る可能性があると思います。