2017-11-28 6 views
0

私はgolangアプリケーションでいくつかのドッカーコンテナを配備しました。そのうちの一つは、私は、このコマンドで起動する必要があります。ドッカーコンテナのアプリが再起動しないのはなぜですか?

docker run --restart unless-stopped -it myapp /bin/bash 

私はいくつかの設定ファイルをコンテナを入力して編集し、次のステップ、そして、私はそのIプレスCTRL後

go build main.go 

./main 実行+ qそれを残す。 すべてが完璧に動作し、サーバを再起動した後、すべてのコンテナが完全に再起動します。しかし、myappコンテナが再起動すると、コンテナがまだ動作している間にgolangアプリケーションが実行されないという問題があります。私はこれをもう一度入力して./mainを実行しなければなりません。どうすれば修正できますか?

Dockerfile

FROM golang:1.8 
WORKDIR /go/src/app 
COPY . . 
RUN go-wrapper download # "go get -d -v ./..." 
RUN go-wrapper install # "go install -v ./..." RUN ["apt-get","update"] 
RUN ["apt-get","install","-y","vim"] 
EXPOSE 3000 
CMD ["app"] 
+0

あなたの "編集"を行い、 'Dockerfile'をビルドしてから、' docker run --restart myapp mainを止めない限り ' – Matt

+0

あなたのDockerfileはどのように見えますか?コンテナの起動時に実行するようにアプリケーションを設定していますか? – foecum

+0

Stack Overflowは、プログラミングおよび開発に関する質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 – jww

答えて

1

あなたがコンテナを作成し、コマンドとして/bin/bashに渡すと、それは限りドッカーが気としてです。コンテナが再起動すると、/bin/bashの別のインスタンスが起動します。

Dockerはシェルセッションを監視せず、コマンドを開始した後に何をするのかを確認しません。実際に./mainをコンテナのコマンドとして実行する場合は、/bin/bashの代わりに/go/src/app/mainをコマンドとして渡す必要があります。

さらに、コードのコンパイルは、コンテナの実行時ではなく、画像のビルド段階で行う方がよいでしょう。

関連する問題