mattintosh note

どこかのエンジニアモドキの備忘録

Docker for Macとdocker-syncのunisonでファイルが同期されない

私は sync_strategy: native_osx で使っているのだけど人によっては sync_strategy: unison で使っているようで、なんか起動するときにエラーが出てるそうな。

unox の中の Python がライブラリを見つけられていないようだ。

Looking for changes dyld: Library not loaded: @executable_path/../.Python Referenced from: /usr/local/Cellar/unox/0.2.0_1/libexec/bin/python3.7 Reason: image not found Fatal error: File monitoring helper program not running

で、この .Python 君はどこにあるのか調べてみると結局は Homebrew のパッケージで言うところの python@3.7フレームワークを見てるっぽい。

drwxr-xr-x  7 224 Oct 27 12:41 ./
drwxr-xr-x  7 224 Jun 15 21:16 ../
lrwxr-xr-x  1  70 Jun 15 21:16 .Python -> ../../../../opt/python/Frameworks/Python.framework/Versions/3.7/Python
drwxr-xr-x 18 576 Jun 15 21:16 bin/
drwxr-xr-x  3  96 Jun 15 21:16 include/
drwxr-xr-x  3  96 Jun 15 21:16 lib/
-rw-r--r--  1  61 Jun 15 21:16 pip-selfcheck.json

ただ、2020 年 10 月 26 日現在、macOS Mojave における Homebrew の python@3.7 パッケージは keg-only となっており、上記の場所は python@3.8 に置き換わっている。brew link --force python@3.7 をしたところで上記のパスにはならない(/usr/local/opt/python@3プレフィックスになってしまう)。シンボリックリンクを弄って python@3.7 を辿るようにしたとしても Observer モジュールが存在しないので動かない。

Looking for changes Traceback (most recent call last): File "/usr/local/bin/unison-fsmonitor", line 24, in from watchdog.observers import Observer ModuleNotFoundError: No module named 'watchdog' Fatal error: File monitoring helper program not running

Python@3.8 を辿るようにもしてみたがこちらもライブラリのエラーになるため Docker for Mac & docker-sync で unison にしてるのにファイルが同期されなくなったという人がちょいちょい増えてきそうな気がする。(Homebrew で upgrade をしていない人は使えるかもしれないけれど)

issue は上がっているけどいまのところ master にはマージされていない模様。そのうち取り込まれて解消されるかもしれない。

Brew install fails due to "recognised Python dependency could not be found" · Issue #14 · EugenMayer/homebrew-dockersync · GitHub

私は docker-sync 自体あまり好きではないので早く Docker for Mac に吸収されて欲しい。

私が docker-sync が嫌いなのは docker-compose のようにサービス名が親ディレクトリから拾えないため、わざわざ docker-sync.yml と docker-compose-dev.yml 内のコンテナ名称をプロジェクトごとに変えなければいけないから。(誰か良い方法を知ってたら教えて欲しい)

Linux 使ってるときはこんな面倒なこと考えなくて済むのに…。