4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

DockerコンテナのSingularity移植で詰まったのでメモ

Last updated at Posted at 2019-05-08

[バイオインフォ向け]俺のDocker & Singularity環境メモ

この続きです。
DockerコンテナをSingularity pullしたらそのままだと動かなかったのでその顛末を書きます。

単純に移植できない原因

Dockerではコンテナ内でroot権限が与えられているのに対しSingularityでは権限が制限されています。

Support for Docker and OCI — Singularity container 3.1 documentation

上記のドキュメントを読むと、

  • root権限を持っていれば、ユーザにcapabilityを付与することで一時的に権限を与える方法がある
  • 環境変数はDockerFile内にENVで書け、.bashrcとか使うな
  • /root を使うインストールをするな
  • $HOME とか $TMP にソフトウェアをインストールするのも良くない
  • docker run --read-only --tmpfs /run --tmpfs /tmp godlovedc/lolcow 使うとファイルシステム周りで変なこと起きてないかチェックできるよ

とか色々書いてあるのですけど、あんま具体的にどうしろ、というのが無かったので僕のケースを書いておきます。

僕のケース

Docker環境で通っていたコマンドが、Singularity移植したら通らなくなった。
以下遺伝研スパコン内でのSingularity Shell内部でのログ。

Singularity metagenome-pipeline-latest.img:/root> cutadapt
Traceback (most recent call last):
  File "/root/.local/bin/cutadapt", line 7, in <module>
    from cutadapt.__main__ import main
ModuleNotFoundError: No module named 'cutadapt'
Singularity metagenome-pipeline-latest.img:/root> which cutadapt
/root/.local/bin/cutadapt

/root/.local/bin/cutadapt にアクセスできてはいるが、 python のmoduleとしてのcutadaptが見れていない。
ここでcutadaptは 公式のドキュメント に従いpipを使って pip3 install --user --upgrade cutadaptのようにインストールしている。

また、そもそもSingularity Shell内部では権限的にpipが使えないっぽいが、singularity pull自体は権限ある環境でやってるので大丈夫そう。とするとやはりインストールディレクトリがダメなのかな。

python moduleのpath確認

Singularity metagenome-pipeline-latest.img:/root> python3
Python 3.5.2 (default, Apr 23 2019, 03:09:46) 
[GCC 7.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> import pprint
>>> pprint.pprint(sys.path)
['',
 '/root',
 '/usr/local/lib/python3.6/dist-packages',
 '/usr/local/lib/python35.zip',
 '/usr/local/lib/python3.5',
 '/usr/local/lib/python3.5/plat-linux',
 '/usr/local/lib/python3.5/lib-dynload',
 '/usr/local/lib/python3.5/site-packages']

Singularity Containerだと pip3 show が通らなかったので元のDocker Containerの中からcutadaptのpathを見てみる


root@402bb7b7a5bb:~# pip3 show cutadapt
Name: cutadapt
Version: 2.1
Summary: trim adapters from high-throughput sequencing reads
Home-page: https://cutadapt.readthedocs.io/
Author: Marcel Martin
Author-email: marcel.martin@scilifelab.se
License: MIT
Location: /root/.local/lib/python3.6/site-packages
Requires: xopen, dnaio
Required-by: 
root@402bb7b7a5bb:~# ls /root/.local/lib/python3.6/site-packages
__pycache__  cutadapt  cutadapt-2.1.dist-info  dnaio  dnaio-0.3.dist-info  xopen-0.5.0.dist-info  xopen.py

なるほど、cutadaptだけ--user オプションをつけたせいで /root/.local/lib/python3.6/site-packages以下にインストールされており(他は全て /usr/local/lib/python3.6/dist-packages以下)、そこがSingularityの権限だとアクセスできないようだ。

cutadaptのインストールコマンドを pip3 install --user --upgrade cutadapt -> pip3 install cutadapt と書き換えたら解決した。

感想

思ったより簡単に解決できた。が、この手の対処はデプロイまでの作業がだるすぎるのをなんとかしたい
(DockerHubのビルド待ち、Singularity Pullの手間、などなどで小さな変更でもSingularity環境で検証するのに1時間ほどかかってしまう。。。)

手元でSingularity Containerを作ればこのだるさは解消できるはずなのだけれど、#WorkflowDevMeetup で聞いてみたところ現状ではあんまりSingularity Containerを直で作る人いないっぽいのでとりあえずは今の構成で頑張るか。

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?