ツールのコンテナ化

From Pitagora-Galaxy Wiki
Jump to: navigation, search

Main Page >> Admin >>

今まで、Tool Shed にそれぞれのツールの wrapper と package を登録することで Galaxy API を使ってインストールしていました。今後、Docker を使う場合には、wrapper は Docker 版に修正して今まで通りに Tool Shed に登録しますが、 package は登録せずに代わりに Docker コンテナを作成することになります。このため、Galaxy ツールをコンテナ化するためには次の二つの作業が必要です。

  1. ツール本体を含む Docker コンテナの作成
  2. 既存 Galaxy ツールの Docker 版の作成


ツール本体を含む Docker コンテナの作成手順

準備するもの

  • エディタ
  • git
  • github アカウント
  • docker hub アカウント

手順

  • git レポジトリをつくる
  • Dockerfile を作成・編集する
  • Dockerfile を含むレポジトリを github に push する
  • dockerhub で “create automated build” して github レポジトリの Dockerfile を指定する

やってみよう

簡単な例として cmatrix を例にして説明します

create git repository

cd ~/repos
mkdir cmatrix
git init
echo “# Dockerfile for cmatrix” > README.md
git add README.md
git commit -m ‘initial commit'

github.com で “+New Repository” しておく

git remote add origin <github repository url>
git push origin master

create Dockerfile

以下のような具合で Dockerfile を作成する

# Docker container for cmatrix, mainly for introduction of docker
#
# VERSION 0.1

# Pull base image.
FROM ubuntu

# maintainer info
MAINTAINER Tazro Inutano Ohta, inutano@gmail.com

# Install packages.
RUN apt-get update && \
    apt-get install -y cmatrix && \
    rm -rf /var/lib/apt/lists/*

# Define default command.
CMD ["cmatrix"]

以下解説

  • “#" で始まる行はコメント
  • 各行先頭の大文字で始まるものがコマンド
  • 以下各コマンドの解説
    • FROM
      • コンテナのベースとなるイメージを指定する。特に設定しなければまずローカルにキャッシュがあるか探してなければ hub.docker.com に探しにいく。ユーザ名とイメージのバージョンタグも指定可能で、 FROM inutano/ubuntu:14.04 のように指定する。
    • MAINTAINER
      • なくてもいいけど自己主張していきたい。
    • RUN
      • 指定したコマンドを実行する。基本的には RUN コマンドで apt-get や curl, git clone, makeなどを実行しつつ環境を構築していく。
    • CMD
      • コンテナを docker run で実行するときにデフォルトで実行されるコマンドを指定する。
  • その他のコマンド
    • ENV
      • 環境変数を設定する。
    • ADD / COPY
      • Dockerfile を build してイメージを作るときにローカルにあるファイルをコピーする。コンテナ内で使われる起動スクリプトなどを導入することが多い。個人的にはあまり好きではないが、githubにレポジトリを作っておいてそこから git clone && make とかするほどでもないちょっとしたスクリプトはこれで入れた方が小回りが効いてよい場合がある。ADD <ローカルのファイルパス> <コンテナ内でファイルを置くパス> と指定する。
    • ENTRYPOINT
      • CMD に似ているがちょっとややこしい。 CMD は厳密には指定されたコマンドを実行するときに “sh <command>” と shを経由して実行する。ENTRYPOINT を設定するとこの sh コマンドが別のコマンドに置き換わる。すなわちコンテナイメージの利用をある特定のコマンドの実行に限定したい場合などに使える。
    • WORKDIR
      • RUN cd とそんなに変わらない。WORKDIR <path> を記述すると直後の RUN もしくは CMD に影響を与える。
  • まだまだたくさんあるが主要なものは以上。詳しくは https://docs.docker.com/articles/dockerfile_best-practices/ などを見るとよし。

push repository to github

Dockerfileを記述したら git push origin master などで Dockerfile を github に push する

git add Dockerfile
git commit -m 'create dockerfile'
git push origin master

create automated build

hub.docker.com にアクセスしてログイン、ナビゲーションバーの Create メニューから Create Automated Build を選択し、 github を選択。Dockerfile をアップしたレポジトリを選択して、Docker image にアクセスするための namespace を設定する。Dockerfileがレポジトリのサブディレクトリに入っている場合は Dockerfile の場所を指定すること。”When Active, new pushes will trigger automatic builds” にチェックを入れておいて Create するとできあがり。まもなく build が始まって完了すると docker image をpull できるようになる。

testing

docker run -it <username>/<image name>:<version> <command> などやってみる。たとえば

docker run -it inutano/cmatrix

のようにバージョンとコマンドを指定しないで実行することもできる。この場合、バージョンは自動的に latest が、コマンドはDockerfile内の CMD で指定された cmatrix コマンドになる。-i はインタラクティブモード、-t は tty の割当。コンテナをバックグラウンドで動かす場合以外はこれらを指定しないと実行結果が表示されない。Dockerの実行の仕方については docker --help などで参照されたし。

Dockerfile作成にあたってのメモ

  • RUN で実行するコマンドはなるべく && などで繋いでまとめる
    • 機能的にまとめられるコマンド群は && などで繋いでなるべく RUN を発行しないでよいようにすることが推奨されている。なぜかというと、docker imageは各コマンド (FROM とか RUN とか)ごとにレイヤーとして管理され、共通のレイヤーは使いまわせるようになっているため、レイヤーごとに整合性チェックなどが入るから。
  • 要らないファイルは消す
    • RUN apt-get update && apt-get install hogs fuga などは環境構築の最初によくやるが、構築が完了したら rm -rf /var/lib/apt/lists/* などで要らないキャッシュファイルなどを消しておくとよい。不要なファイルが残っているとイメージのサイズが大きくなってしまい、せっかくの docker の速度が犠牲になってしまうし、ストレージも無駄。
  • 1つのプロセスしか走らせない
    • 1つのコンテナにいろいろなツールを詰め込むことは可能だが、スケールやイメージの共有、ポータビリティの観点から分けられることが推奨されている。data analysis workflowにおいても、1つのコンテナで複数のジョブをこなすとバージョン管理やワークフローの組み直しが難しくなるので、よほどの理由 (どうしてもパイプで繋ぎたいとか) がなければ分割して管理する方がよい。
  • コンテナの汎用性と専門性のバランス
    • コンテナは軽量でミニマムな機能ごとに作るべしというガイドラインからは、なるべく汎用的なコンテナを作って共有するのがよい、とされるが、データ解析ワークフローにおけるコンテナでは、汎用性を高めるためのコストが高く似ているが目的に特化したコンテナ群を作った方がラクな場合もある。Dockerfileを書くことは簡単なので、無理に汎用性を追い求めずに管理しやすいようにブランチやタグ、コメントをちゃんとつけておくことが大事。論文などの外部ドキュメントへのIDを記述することも大事。
  • コンテナ実行時のパラメータ
    • 再現性のことを考えると理想的にはコンテナ実行時に引数として与えられるパラメータはないほうがよい。どうしても必要ならスクリプトにハードコートしてADDするなどした方がよい。

既存 Galaxy ツールの Docker 版の作成手順

Docker 版の Wrapper XML を作成し、登録して動作確認、その後、Tool Shed に登録します。

Wrapper XML の作成

Tool Shed からインストールした現行の tophat2 をベースに Docker 用 tophat2 を作成するため、新しいディレクトリに全てのファイルをコピーする。

$ mkdir ~/galaxy-dist/tools/tophat2_docker/
$ cp -r shed_tools/toolshed.g2.bx.psu.edu/repos/devteam/tophat2/81f97e12e573/tophat2/* ~/galaxy-dist/tools/tophat2_docker/

tool_dependencies.xml は使わないのでもう要らない、やったね!(shed_upload.tar.gz も Tool Shed にアップしたときのゴミのようなので削除)

$ rm tool_dependencies.xml

tophat2_wrapper.xml の <requirements> タグだけを変更すればよい。

$ vi ~/galaxy-dist/tools/tophat2_docker/tophat2_wrapper.xml

<tool id="tophat2_docker" name="Tophat Docker" version="0.7">
...
    <requirements>
        <container type="docker">nasuno/tophat2:2.0.9</container>
        <!--
        <requirement type="package" version="0.1.18">samtools</requirement>
        <requirement type="package" version="2.1.0">bowtie2</requirement>
        <requirement type="package" version="2.0.9">tophat2</requirement>
        -->
    </requirements>

ツールの登録

tool_conf.xml にツールを追加する。この記載は Tool Shed に登録後は必要なくなる。

 $ vi ~/galaxy-dist/config/tool_conf.xml

  <section id="docker" name="Docker Tools">
    <tool file="tophat2_docker/tophat2_wrapper.xml" />
  </section>

job_conf.xml にも tool id の明記が必要? 要確認

 $ vi ~/galaxy-dist/config/job_conf.xml

    <tools>
        <tool id="tophat2_docker" destination="docker_local" />
    </tools>

動作確認

再起動

$ sudo service galaxy restart

Galaxy UI から実行して、正常に結果が得られることを確認

Tool Shed への登録

Galaxy サーバー側で設定しておくべきこと

この設定は Pitagora-Galaxy の 0.3.x で反映される予定です。

ロケールのエラー対処(これは Mac からログインしたときの問題、あとでちゃんと対処する)

Last login: Wed Sep 30 14:34:21 2015 from 192.168.56.1
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

$ export LC_CTYPE=

ここを参考に Docker をインストール(http://qiita.com/zwirky/items/991f61a231f4e198a320)

$ sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
$ sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum -y install docker-io

Docker 自動起動設定

$ sudo service docker start
$ sudo chkconfig docker on

job_conf.xml を作成して起動できることを確認

$ cd ~/galaxy-dist/config
$ cp job_conf.xml.sample_basic job_conf.xml
$ sudo service galaxy restart
$ tail -f ~/galaxy-dist/paster.log

job_conf.xml に Docker の設定を追加

$ vi ~/galaxy-dist/confnig/job_conf.xml
    <destinations default="docker_local">
        <destination id="local" runner="local"/>
        <destination id="docker_local" runner="local">
            <param id="docker_enabled">true</param>
        </destination>
    </destinations>
  • tool_conf.xml を作成して起動できることを確認
$ cd ~/galaxy-dist/config
$ cp tool_conf.xml.sample tool_conf.xml
$ sudo service galaxy restart
$ tail -f ~/galaxy-dist/paster.log

tool_conf.xml にツール追加

 $ vi ~/galaxy-dist/config/tool_conf.xml
  <section id="aurora" name="Aurora Job Tools">
    <tool file="aurora/tophat2_wrapper.xml" />
    <tool file="aurora/cufflinks_wrapper.xml" />
    <tool file="aurora/cuffdiff_wrapper.xml" />
    <tool file="aurora/cuffmerge_wrapper.xml" />
  </section>

Galaxy 再起動

$ sudo service galaxy restart

tty なしで sudo ができるように /etc/sudoers から requiretty をコメントアウトする

$ sudo visudo
#Defaults    requiretty

関連ドキュメント

Galaxy Wiki から辿れるドキュメントは 2014 年のものが多い

  • Galaxy Wiki "Docker Integration"
    • job_conf.xml に指定することで docker で実行することができる
    • <param id="docker_enabled">true</param> が指定される必要がある

Dev メーリングリスト には新しい記事も少しある


過去ログ

Pitagora VM でコンテナ実行 〜 失敗(2015-09-25 山中)

まずは、RNA-seq 01 をコンテナ実行できるようにする。ここでは、ひとまず、Tool Shed は用いないでインストールする。

Docker のインストール

ロケールのエラー対処(これは Mac からログインしたときの問題、あとでちゃんと対処する)

Last login: Wed Sep 30 14:34:21 2015 from 192.168.56.1
-bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory

$ export LC_CTYPE=

ここを参考に Docker をインストール(http://qiita.com/zwirky/items/991f61a231f4e198a320)

$ sudo rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6
$ sudo yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
$ sudo yum -y install docker-io

Docker 自動起動設定

$ sudo service docker start
$ sudo chkconfig docker on

Galaxy ツールのインストール

ここからは 那須野さんの資料 を参考にする

galaxy.ini は変更なし

job_conf.xml を作成して起動できることを確認

$ cd ~/galaxy-dist/config
$ cp job_conf.xml.sample_basic job_conf.xml
$ sudo service galaxy restart
$ tail -f ~/galaxy-dist/paster.log

job_conf.xml に Docker の設定を追加

$ vi ~/galaxy-dist/confnig/job_conf.xml
    <destinations default="docker_local">
        <destination id="local" runner="local"/>
        <destination id="docker_local" runner="local">
            <param id="docker_enabled">true</param>
        </destination>
    </destinations>
    <tools>
        <tool id="tophat2_docker" destination="docker_local" />
    </tools>
  • tool_conf.xml を作成して起動できることを確認
$ cd ~/galaxy-dist/config
$ cp tool_conf.xml.sample tool_conf.xml
$ sudo service galaxy restart
$ tail -f ~/galaxy-dist/paster.log

tool_conf.xml にツール追加

 $ vi ~/galaxy-dist/config/tool_conf.xml
  <section id="aurora" name="Aurora Job Tools">
    <tool file="aurora/tophat2_wrapper.xml" />
    <tool file="aurora/cufflinks_wrapper.xml" />
    <tool file="aurora/cuffdiff_wrapper.xml" />
    <tool file="aurora/cuffmerge_wrapper.xml" />
  </section>

注)上記で空の tool_conf.xml を作成して新しいツールのみを記載すると、ファイルのアップロードができなくなる(Get Data > Upload Files などのツールがなくなるからだろうか?)

galaxy-dist/tools/ にツール群(aurora/ ディレクトリ)を置く

Galaxy 再起動

$ sudo service galaxy restart

Galaxy ツールの実行

試しに、Tophat2 を実行してみる(まだ、リファレンスはダウンロードしていないのでエラーになるはずだが、その前にコンテナがダウンロードされる様子が見られるはず?)

galaxy.jobs.handler DEBUG 2015-10-02 16:43:24,294 (19) Dispatching to local runner
192.168.56.1 - - [02/Oct/2015:16:43:24 +0900] "GET /api/histories/e85a3be143d5905b/contents HTTP/1.1" 200 - "http://192.168.56.10:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
galaxy.jobs DEBUG 2015-10-02 16:43:24,797 (19) Persisting job destination (destination id: docker_local)
galaxy.jobs.handler INFO 2015-10-02 16:43:24,849 (19) Job dispatched
galaxy.jobs.runners DEBUG 2015-10-02 16:43:25,899 (19) command is: sudo docker inspect nasuno/tophat2:2.0.9 > /dev/null 2>&1
[ $? -ne 0 ] && sudo docker pull nasuno/tophat2:2.0.9 > /dev/null 2>&1

sudo docker run -e "GALAXY_SLOTS=$GALAXY_SLOTS" -v /home/galaxy/galaxy-dist:/home/galaxy/galaxy-dist:ro -v /home/galaxy/galaxy-dist/tools/aurora:/home/galaxy/galaxy-dist/tools/aurora:ro -v /home/galaxy/galaxy-dist/database/job_working_directory/000/19:/home/galaxy/galaxy-dist/database/job_working_directory/000/19:rw -v /home/galaxy/galaxy-dist/database/files:/home/galaxy/galaxy-dist/database/files:rw -w /home/galaxy/galaxy-dist/database/job_working_directory/000/19 --net none --rm -u 500 nasuno/tophat2:2.0.9 /home/galaxy/galaxy-dist/database/job_working_directory/000/19/container.sh; return_code=$?; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/align_summary.txt ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/align_summary.txt /home/galaxy/galaxy-dist/database/files/000/dataset_38.dat ; fi; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/insertions.bed ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/insertions.bed /home/galaxy/galaxy-dist/database/files/000/dataset_39.dat ; fi; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/deletions.bed ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/deletions.bed /home/galaxy/galaxy-dist/database/files/000/dataset_40.dat ; fi; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/junctions.bed ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/junctions.bed /home/galaxy/galaxy-dist/database/files/000/dataset_41.dat ; fi; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/accepted_hits.bam ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/19/tophat_out/accepted_hits.bam /home/galaxy/galaxy-dist/database/files/000/dataset_42.dat ; fi; cd /home/galaxy/galaxy-dist; /home/galaxy/galaxy-dist/set_metadata.sh ./database/files /home/galaxy/galaxy-dist/database/job_working_directory/000/19 . /home/galaxy/galaxy-dist/config/galaxy.ini /home/galaxy/galaxy-dist/database/tmp/tmplmMNkR /home/galaxy/galaxy-dist/database/job_working_directory/000/19/galaxy.json /home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_in_HistoryDatasetAssociation_38_YtvRvd,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_kwds_HistoryDatasetAssociation_38_nJJIcR,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_out_HistoryDatasetAssociation_38_8gkr7W,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_results_HistoryDatasetAssociation_38_Vk75zx,,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_override_HistoryDatasetAssociation_38_cWzzbx /home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_in_HistoryDatasetAssociation_39_ThzdCK,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_kwds_HistoryDatasetAssociation_39_tTdYLd,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_out_HistoryDatasetAssociation_39_sOkIfj,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_results_HistoryDatasetAssociation_39_EA6Czb,,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_override_HistoryDatasetAssociation_39_LA2dWu /home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_in_HistoryDatasetAssociation_40_wKAlxQ,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_kwds_HistoryDatasetAssociation_40_YhN86X,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_out_HistoryDatasetAssociation_40_LCyXX4,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_results_HistoryDatasetAssociation_40_BO9Thy,,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_override_HistoryDatasetAssociation_40_KFfImW /home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_in_HistoryDatasetAssociation_41_YKkt0h,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_kwds_HistoryDatasetAssociation_41_YZDs3d,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_out_HistoryDatasetAssociation_41_oDTWLy,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_results_HistoryDatasetAssociation_41_x5YiCp,,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_override_HistoryDatasetAssociation_41_QeIKVN /home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_in_HistoryDatasetAssociation_42_319oJf,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_kwds_HistoryDatasetAssociation_42_MxUOfS,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_out_HistoryDatasetAssociation_42_NwAOj4,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_results_HistoryDatasetAssociation_42__5nYBh,,/home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_override_HistoryDatasetAssociation_42_n74S5F; sh -c "exit $return_code"
galaxy.jobs.runners.local DEBUG 2015-10-02 16:43:25,901 (19) executing job script: /home/galaxy/galaxy-dist/database/job_working_directory/000/19/galaxy_19.sh
galaxy.jobs DEBUG 2015-10-02 16:43:26,045 (19) Persisting job destination (destination id: docker_local)
192.168.56.1 - - [02/Oct/2015:16:43:28 +0900] "GET /api/histories/e85a3be143d5905b/contents HTTP/1.1" 200 - "http://192.168.56.10:8080/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36"
galaxy.jobs.runners.local DEBUG 2015-10-02 16:43:30,335 execution finished: /home/galaxy/galaxy-dist/database/job_working_directory/000/19/galaxy_19.sh
galaxy.jobs.output_checker INFO 2015-10-02 16:43:30,403 Job 19: Log: tool progress
galaxy.jobs.output_checker INFO 2015-10-02 16:43:30,417 Job 19: Log: tool progress
galaxy.jobs DEBUG 2015-10-02 16:43:30,897 job 19 ended
galaxy.datatypes.metadata DEBUG 2015-10-02 16:43:30,897 Cleaning up external metadata files
galaxy.datatypes.metadata DEBUG 2015-10-02 16:43:30,971 Cleaning up abandoned MetadataTempFile file: /home/galaxy/galaxy-dist/database/job_working_directory/000/19/metadata_temp_file_OBVT1e

sudo docker run となっているけど、コンテナはダウンロードされていない。一方で、従来の tophat2 は実行できたことから、job_conf.xml の destinations default が考慮されていない気もする。

Pitagora VM でコンテナ実行 〜 再チャレンジ(2015-10-13 山中)

戴いた Aurora 用のツールを使っていたので、切り分けができない。そこで、Docker 用 Galaxy ツールを作るところから試す。

Docker 用 Galaxy ツールの作成

Tool Shed からインストールした現行の tophat2 から Docker 用 tophat2 を作成する。

$ mkdir ~/galaxy-dist/tools/tophat2_docker/
$ cp -r shed_tools/toolshed.g2.bx.psu.edu/repos/devteam/tophat2/81f97e12e573/tophat2/ ~/galaxy-dist/tools/tophat2_docker/

tophat2_wrapper.xml の以下の部分だけ変更すればいいはず

$ vi ~/galaxy-dist/tools/tophat2_docker/tophat2_wrapper.xml

<tool id="tophat2_docker" name="Tophat Docker" version="0.7">
...
    <requirements>
        <container type="docker">nasuno/tophat2:2.0.9</container>
        <!--
        <requirement type="package" version="0.1.18">samtools</requirement>
        <requirement type="package" version="2.1.0">bowtie2</requirement>
        <requirement type="package" version="2.0.9">tophat2</requirement>
        -->
    </requirements>

もろもろ設定して実行

 $ vi ~/galaxy-dist/config/tool_conf.xml

  <section id="docker" name="Docker Tools">
    <tool file="tophat2_docker/tophat2_wrapper.xml" />
  </section>

そして、今回は job.conf に tool id も明記する。

    <destinations default="docker_local">
        <destination id="local" runner="local"/>
        <destination id="docker_local" runner="local">
            <param id="docker_enabled">true</param>
        </destination>
    </destinations>
    <tools>
        <tool id="tophat2_docker" destination="docker_local" />
    </tools>

再起動

$ sudo service galaxy restart

UI から実行 〜 前回同様、正常実行されず

galaxy.jobs DEBUG 2015-10-02 18:01:51,051 (32) Persisting job destination (destination id: docker_local)
galaxy.jobs.handler INFO 2015-10-02 18:01:51,090 (32) Job dispatched
galaxy.jobs.runners DEBUG 2015-10-02 18:01:51,746 (32) command is: sudo docker inspect nasuno/tophat2:2.0.9 > /dev/null 2>&1
[ $? -ne 0 ] && sudo docker pull nasuno/tophat2:2.0.9 > /dev/null 2>&1

sudo docker run -e "GALAXY_SLOTS=$GALAXY_SLOTS" -v /home/galaxy/galaxy-dist:/home/galaxy/galaxy-dist:ro -v /home/galaxy/galaxy-dist/tools/tophat2_docker:/home/galaxy/galaxy-dist/tools/tophat2_docker:ro -v /home/galaxy/galaxy-dist/database/job_working_directory/000/32:/home/galaxy/galaxy-dist/database/job_working_directory/000/32:rw -v /home/galaxy/galaxy-dist/database/files:/home/galaxy/galaxy-dist/database/files:rw -w /home/galaxy/galaxy-dist/database/job_working_directory/000/32 --net none --rm -u 500 nasuno/tophat2:2.0.9 /home/galaxy/galaxy-dist/database/job_working_directory/000/32/container.sh; return_code=$?; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/align_summary.txt ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/align_summary.txt /home/galaxy/galaxy-dist/database/files/000/dataset_99.dat ; fi; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/insertions.bed ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/insertions.bed /home/galaxy/galaxy-dist/database/files/000/dataset_100.dat ; fi; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/deletions.bed ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/deletions.bed /home/galaxy/galaxy-dist/database/files/000/dataset_101.dat ; fi; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/junctions.bed ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/junctions.bed /home/galaxy/galaxy-dist/database/files/000/dataset_102.dat ; fi; if [ -f /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/accepted_hits.bam ] ; then cp /home/galaxy/galaxy-dist/database/job_working_directory/000/32/tophat_out/accepted_hits.bam /home/galaxy/galaxy-dist/database/files/000/dataset_103.dat ; fi; cd /home/galaxy/galaxy-dist; /home/galaxy/galaxy-dist/set_metadata.sh ./database/files /home/galaxy/galaxy-dist/database/job_working_directory/000/32 . /home/galaxy/galaxy-dist/config/galaxy.ini /home/galaxy/galaxy-dist/database/tmp/tmpvunv2d /home/galaxy/galaxy-dist/database/job_working_directory/000/32/galaxy.json /home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_in_HistoryDatasetAssociation_99_maUvQ4,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_kwds_HistoryDatasetAssociation_99_ILJ6TU,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_out_HistoryDatasetAssociation_99_PIEhAD,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_results_HistoryDatasetAssociation_99_dIzREA,,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_override_HistoryDatasetAssociation_99_aaC9xe /home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_in_HistoryDatasetAssociation_100_yanMn6,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_kwds_HistoryDatasetAssociation_100_O7F4Zk,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_out_HistoryDatasetAssociation_100_rDEKrb,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_results_HistoryDatasetAssociation_100_8I9YYV,,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_override_HistoryDatasetAssociation_100_FXBkyA /home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_in_HistoryDatasetAssociation_101_dp_kwZ,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_kwds_HistoryDatasetAssociation_101_BJogM9,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_out_HistoryDatasetAssociation_101_NoqTk0,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_results_HistoryDatasetAssociation_101_3_Rj1j,,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_override_HistoryDatasetAssociation_101_HAvyr0 /home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_in_HistoryDatasetAssociation_102_v8QWr0,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_kwds_HistoryDatasetAssociation_102_zLIIFT,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_out_HistoryDatasetAssociation_102_sQ9PEO,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_results_HistoryDatasetAssociation_102_lNaQ58,,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_override_HistoryDatasetAssociation_102_H39XE_ /home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_in_HistoryDatasetAssociation_103_T2nF6O,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_kwds_HistoryDatasetAssociation_103_Fimw3u,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_out_HistoryDatasetAssociation_103_6KDNN6,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_results_HistoryDatasetAssociation_103_FY8r_6,,/home/galaxy/galaxy-dist/database/job_working_directory/000/32/metadata_override_HistoryDatasetAssociation_103_78EPuc; sh -c "exit $return_code"
galaxy.jobs.runners.local DEBUG 2015-10-02 18:01:51,747 (32) executing job script: /home/galaxy/galaxy-dist/database/job_working_directory/000/32/galaxy_32.sh
galaxy.jobs DEBUG 2015-10-02 18:01:51,832 (32) Persisting job destination (destination id: docker_local)

Docker の動作確認

docker pull はできている

$ sudo docker pull nasuno/tophat2:2.0.9
$ sudo docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
nasuno/tophat2      2.0.9               13f0339af9c0        9 weeks ago         879.3 MB

Galaxy のバージョン

その後、Galaxyを最新にアップしてみたが、それでも状況変わらず

Pitagora VM でコンテナ実行 〜 解決(2015-10-22 山中)

実行されているように見えて実行されていないのはなぜか、遂に解決

実行されたスクリプトを見てみる

galaxy.ini で cleanup_job = never を指定すれば、実行されたスクリプトが ~/galaxy-dist/database/job_working_directory に残る。このスクリプトを手動で実行してみると、正常に実行される。

/etc/sudoers 設定変更

tty なしで sudo ができるように /etc/sudoers から requiretty をコメントアウトする

$ sudo visudo
#Defaults    requiretty

これで Galaxy の UI から実行できることが確認できた。

Docker を実行するのに sudo を使用していない場合には、job_conf.xml に <param id="docker_sudo">false</param> を設定する。参考