2016-03-24 36 views
2

Windowsコンテナを使用してWindows 2016 Server TP4でDockerを使用しています。Docker:コンテナの起動時にバッチファイルを実行し、ユーザーをcmd/sessionに維持する方法

コンテナが起動すると、特定の初期化スクリプト(init.bat)を実行したいが、コンテナセッション(cmd)にログインしたままにしておきたい。

FROM windowsservercore 
ADD sources /init 
ENTRYPOINT C:/init/init.bat 

と(起動時にコンテナ内で実行することになっている)このinit.bat:コンテナの

mkdir C:\myfolder 
echo init end 

と、このスタートアップコール:

このdockerfileで

docker run -it test/test cmd 

init.batバッチファイルが取得されます。コンテナ内で実行されますが、ユーザはコンテナにログインしたままではありませんが、コンテナは終了します(終了コード0)。

なぜ終了するのか分かりません。

画像もその後、CMDまたはコマンドが ENTRYPOINTに引数として追加されますENTRYPOINTを指定する場合:私はdocker documentationを理解する方法から。

cmdcmdコマンドは、私のinitスクリプトであるentrypointに追加する必要がありますが、そうではありません。

この構文も試しましたが、違いはありません。

ENTRYPOINT ["C:/init/init.bat"] 

私はdockerfileからENTRYPOINTを削除し、cmdコマンドを使用してコンテナを起動した場合、私はセッション中に滞在し、私はもちろん、手動でinit.batスクリプトを実行することができ、それが動作しますが、私はそれがしたいです自動的に実行されます。

私はUbuntuのコンテナで作業するとき、通常は初期化スクリプトを実行するのにsupervisordを使用し、bin/bash(Windowsではcmdに相当)をコマンドとして実行します。 私はWindowsのコンテナで同じことを行う方法がわかりません。

あなたはDockerfileにこのような何かを入れて試すことができます代わりにENTRYPOINTの
+0

あなたはあなたの中に 'スタート/ BのCMD/K "ドッキングウィンドウの実行-itテスト/テストcmdを"'試すことができますバッチファイル –

+0

@DennisvanGils私はこれを試して、私のinit.batに行を追加しましたが、まだ終了します。これは、コンテナの実行を開始したときの出力です。http://snag.gy/la4q3.jpg –

+0

@DennisvanGilsちょうど明白です:init.batはコンテナの内側で実行されていて、外側では実行されていません。 (私はコンテナの中から「ドッカーを走らせて」と呼ぶ理由はわかりませんが、start/b cmd/k "c:\ init \ init.bat")という意味です。とにかく、私は両方を試みた、まだ成功しなかった。通常、Linuxのコンテナで作業するときは、スーパーシェルを使ってinitシェルスクリプトを起動し、bin/bashをコマンドとして使います。しかし、今はWindowsのコンテナでそれをどうやって行うのか分かりません。 –

答えて

2

CMD C:\init\init.bat && cmd

+0

パーフェクト、それは動作します!しかし、私はWindowsコンテナを持っているので注意してください: 'CMD C:\ init \ init.bat && cmd'。私はあなたの答えを編集しました。助けてくれてありがとう! –

+0

これは私のために働いていない...誰かが何かを考えることができますか?私は見ることができるログがありますか? – sebagomez

関連する問題