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を理解する方法から。
cmd
cmd
コマンドは、私のinitスクリプトであるentrypointに追加する必要がありますが、そうではありません。
この構文も試しましたが、違いはありません。
ENTRYPOINT ["C:/init/init.bat"]
私はdockerfileからENTRYPOINTを削除し、cmd
コマンドを使用してコンテナを起動した場合、私はセッション中に滞在し、私はもちろん、手動でinit.batスクリプトを実行することができ、それが動作しますが、私はそれがしたいです自動的に実行されます。
私はUbuntuのコンテナで作業するとき、通常は初期化スクリプトを実行するのにsupervisord
を使用し、bin/bash(Windowsではcmd
に相当)をコマンドとして実行します。 私はWindowsのコンテナで同じことを行う方法がわかりません。
あなたはあなたの中に 'スタート/ BのCMD/K "ドッキングウィンドウの実行-itテスト/テストcmdを"'試すことができますバッチファイル –
@DennisvanGils私はこれを試して、私のinit.batに行を追加しましたが、まだ終了します。これは、コンテナの実行を開始したときの出力です。http://snag.gy/la4q3.jpg –
@DennisvanGilsちょうど明白です:init.batはコンテナの内側で実行されていて、外側では実行されていません。 (私はコンテナの中から「ドッカーを走らせて」と呼ぶ理由はわかりませんが、start/b cmd/k "c:\ init \ init.bat")という意味です。とにかく、私は両方を試みた、まだ成功しなかった。通常、Linuxのコンテナで作業するときは、スーパーシェルを使ってinitシェルスクリプトを起動し、bin/bashをコマンドとして使います。しかし、今はWindowsのコンテナでそれをどうやって行うのか分かりません。 –