ラベル docker の投稿を表示しています。 すべての投稿を表示
ラベル docker の投稿を表示しています。 すべての投稿を表示

2018年1月11日木曜日

Docker上のUbuntuでsndfileにハマっていた話

dockerでjupyterを使う


最近はjupyter notebookをよく使っているので, モジュール(ここではlibrosaなどのこと)をホストマシンに直入れしています.

誰しも, いろいろプログラムを触っているうちに, 有用なレガシーコードを動かしたくなることがあると思います.
しかし, importしているモジュールのバージョンが古い, ということがあります.
僕は, それを解決するために, dockerコンテナ上でjupyter notebookを動かしています.

dockerコンテナ毎でモジュールを管理していけば楽じゃないかと.
(結局, モジュール数が増えると管理が大変なんだけど. 誰か上手な方法を教えて欲しいです.)

構築は大変楽で, anaconda3入りのコンテナをpullして, ターミナルで,

docker run -dit -p 8888:8888 --name jupyter-notebook -v $HOME/jupyter-notebook/notebooks:/opt/notebooks continuumio/anaconda3 /bin/bash -c "/opt/conda/bin/conda install jupyter -y --quiet && /opt/conda/bin/jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --no-browser --allow-root"

するだけです. あとは,

docker logs jupyter-notebook

で出てくるURLをブラウザにコピペするだけです.


ところが


jupyterでimportした, 音声系のプログラムを動かすためのsoundfileがこう吐き出すのです.

OSError: ctypes.util.find_library() did not manage to locate a library called 'sndfile'.

ctypes.util.find_library()がsndfileを管理していない??
ググっても情報が少なくて小一時間はまりました.

結論


apt-get install libsndfile1

で直る.

libsndfileはUbuntuの音声読み書き用のライブラリで, soundfileが読み書きに使っています. 
僕は, /usr/lib内にlibsndfileがないため, OSErrorになったのだろうと考えています.

わりとチンケなエラーだったな_(┐「ε:)_