log.ソフトウェア関連の技術系記事やウェブサービスに関する話題が中心。org/apache/commons/daemon/support/DaemonLoaderApacheのcommons-daemonを使ってサーバープログラムをデーモン化しようとしていたらjsvcの起動でエラーに遭遇。調べても解決してるっぽい記事がでてこない。原因はjsvcの-cpオプションに指定するjarを相対パスでしていたことだった。jsvcは-userを指定して実行ユーザーを変えたりできるのでJVM実行時のカレントディレクトリは別の場所になっているようだ。-cpに指定するパスはすべて絶対パスにすることで起動に成功した。共有2014年6月16日月曜日dockerコンテナを別のコマンドで立ち上げる方法はver.1.1から?docker1.1からコンテナを別のコマンドで立ち上げることができるようになるかも。https://github.com/dotcloud/docker/issues/1228#issuecomment-45546178dockerコンテナは停止してもstartコマンドで再度立ち上げることができる。runの時に実行したコマンドでしか起動できない。障害が起きてコンテナが停止して、更にはコンテナがstartで起動しなくなっていたら、原因解析やデータを救出したりすることが難しくなる。現時点でできる対策としては・必ずsshdを同時に起動しておく・volumeや--volumes-fromなどを使ってデータを隔離しておくといったところ。runすることでコンテナが停止したタイミングのデータにアクセスできる。これができれば問題ないじゃんって話もあるけど同じコンテナですぐに繋げられる方が楽だよね。nsinitというのを使って直接dockerの空間にアタッチする方法があるので、それを使えばデータ救出や障害解析ができそう。いえ、実験とかの時に無駄にコンテナを量産しなくてすむし、ぜひぜひ別コマンドでの起動に対応して欲しい。--linkで意味を持つdockerのハマりどころとしてEXPOSEが理解できないというのがあると思う。EXPOSEは書いただけで何か動作が変わるといったものではなく、他の機能から参照されて意味を持つ。dockerに入門したてだとEXPOSEを指定しないとコンテナにネットワーク接続できないと勘違いしてしまったりするがそんなことはない。-pオプションでポートを外部公開できるし、dockerネットワークのIPを使ってコンテナ間もしくはホスト・コンテナ間で通信可能だ。-PもしくはDockerのlink機能を使ってコンテナ間連携をするときだけ意味を持つ。-PはEXPOSEしているすべてのポートをpublishする。マッピングの指定をしないのでdockerが勝手にホストのポートを割り当てる。連携対象のコンテナを指定するとEXPOSEしているポートに接続するための環境変数を付けてコンテナを起動する。共有dockerは再起動しても変更が消えることはないdockerに関する記事で「dockerは再起動すると変更が元に戻る」っていう書き方をしている人が多いけど誤解なのでこういう書き方はやめていただきたい。意味は新しいコンテナでプロセスを起動するということであって再起動ではない。restartというコマンドもある。この再起動の場合にはコンテナ上の変更が元に戻るということはない。(Atom)プロフィール@santa128bitdotneet主にウェブ・モバイルアプリの開発をしているソフトウェアエンジニアです。