takeshita_kyouhei
2024年3月22日 8時58分
VSCode上で「アプリをArmadilloで実行」を実施した際にエラーとなってアプリを実行することができません
以下のようなエラーが発生します
data_uploader.conf 100% 1048 294.8KB/s 00:00 warning: previously set command is overwritten. The following command will NOT be executed: warning: python3 /vol_app/src/main.py warning: previously set command is overwritten. The following command will NOT be executed: warning: influxd run Starting 'data_uploader' time="2024-03-22T08:50:30+09:00" level=warning msg="The input device is not a TTY. The --tty and --interactive flags might not work properly" eea3a960b9cc6ca875359e982ede29fa2bfd6d07d609cd3ddbc814b67c854b9e 2024/03/21 23:50:30 E! unknown command "run"
アプリ設定ファイル「data_uploader.conf」→「app.conf」になにか問題があるという認識なのですが、修正必要な点はありますでしょうか?
以下、現状の「app.conf」になります
set_image localhost/{{PROJECT}}:latest # mount app sources and data: # - /var/app/rollback/volumes can be rolled back on failed # upgrades, suitable for application sources and assets. # - /var/app/volumes is not copied on updates and more suitable # for volatile data such as logs and databases. add_volumes /var/app/rollback/volumes/{{PROJECT}}:/vol_app add_volumes /var/app/volumes/{{PROJECT}}:/vol_data # Allow LED to be written. This is application specific # and should be changed depending on your needs. add_volumes /sys:/sys add_ports 8086:8086 # Allow input to containers and see output from containers # python bufferizes its output by default when stdout is not a terminal, # so print() statements would only be printed after a sufficient number # of messages have accumulated. Force immediate output without flush for # convenient logging add_args -it # Add environment variables set by Atmark Techno. add_armadillo_env # launch app set_command python3 /vol_app/src/main.py set_command influxd run set_command telegraf run
コメント
takeshita_kyouhei
本件返信いただきありがとうございます
>
> #!/bin/sh > python3 /vol_app/src/main.py > influxd run > telegraf run >
> これを、launch.sh のようなファイル名で保存して、
> set_command (launch.shを置いたディレクトリ)/launch.sh
> とします。
上記に記載されています「set_command (launch.shを置いたディレクトリ)/launch.sh」の(launch.shを置いたディレクトリ)はコンテナ内部のパスという認識であっていますでしょうか?
app.conf(抜粋)
# launch app set_command /vol_app/launch.sh
Dockerfile(抜粋)
ARG PRODUCT COPY resources [r]esources_${PRODUCT} / COPY launch.sh /vol_app/
上記のように設定していますが、正常にアプリを実行できませんでした
エラー内容は以下のとおりです
* 実行するタスク: ./scripts/run_armadillo.sh data_uploader.conf 100% 989 369.4KB/s 00:00 Starting 'data_uploader' time="2024-03-22T11:19:33+09:00" level=warning msg="The input device is not a TTY. The --tty and --interactive flags might not work properly" 2bc3053b3df9332da36f9c4b958580dce7236798b6800881dabfbe788119e321 Error: you can only attach to running containers
at_makoto.sato
佐藤です。
> app.conf(抜粋)
>
> # launch app > set_command /vol_app/launch.sh >
>
> Dockerfile(抜粋)
>
> ARG PRODUCT > COPY resources [r]esources_${PRODUCT} / > COPY launch.sh /vol_app/ >
app/src の下に launch.sh を作成すれば COPY launch.sh /vol_app/ は不要で、
set_command /vol_app/src/launch.sh とすれば良いと思います。
>
> 上記のように設定していますが、正常にアプリを実行できませんでした
> エラー内容は以下のとおりです
>
> * 実行するタスク: ./scripts/run_armadillo.sh > > data_uploader.conf 100% 989 369.4KB/s 00:00 > Starting 'data_uploader' > time="2024-03-22T11:19:33+09:00" level=warning msg="The input device is not a TTY. The --tty and --interactive flags might not work properly" > 2bc3053b3df9332da36f9c4b958580dce7236798b6800881dabfbe788119e321 > Error: you can only attach to running containers >
launch.sh に実行権は与えましたでしょうか。
chmod +x launch.sh
takeshita_kyouhei
返信いただきありがとうございます
> launch.sh に実行権は与えましたでしょうか。
> chmod +x launch.sh
取り急ぎATDE9上で実行権は付与しました
上記について、確認したいのですが
1.実行権はATDE9上で付与するので間違いないでしょうか?
コンテナ上で実行権を付与する必要がある?
→ATDE9で付与された実行権をコンテナ上に再現している?
2.このlaunch.shはATDE上で実行される?
「アプリをArmadilloで実行」を実施した際の挙動は、ATDE9上からArmadilloに指示を行っているだけ?
at_makoto.sato
佐藤です。
> 1.実行権はATDE9上で付与するので間違いないでしょうか?
> コンテナ上で実行権を付与する必要がある?
> →ATDE9で付与された実行権をコンテナ上に再現している?
ATDE9上で付与します。今回の場合ですと実行権を与えたlaunch.shが
Armadilloへ転送され、コンテナ内で実行されます。
> 2.このlaunch.shはATDE上で実行される?
> 「アプリをArmadilloで実行」を実施した際の挙動は、ATDE9上からArmadilloに指示を行っているだけ?
Armadillo上のコンテナ内で実行されます。
「アプリをArmadilloで実行」を実施した際の挙動は、アプリのソースやコンテナのconfファイルをArmadilloへ転送し、
Armadillo上のコンテナを起動します。
takeshita_kyouhei
launch.shに対して、実行権限を付与してみたり、app.confに記載するコマンドを「set_command sh /vol_app/launch.sh」に変更してみましたが、アプリの実行ができません
以下のようなエラーがVSCode上に表示されます
* 実行するタスク: ./scripts/run_armadillo.sh Warning: Permanently added '192.168.3.67' (ECDSA) to the list of known hosts. data_uploader.conf 100% 992 448.7KB/s 00:00 Starting 'data_uploader' time="2024-03-22T15:26:53+09:00" level=warning msg="The input device is not a TTY. The --tty and --interactive flags might not work properly" c7554ea94aa86c9b7a0f5fa40c2e93b04d1ae3c1d9aade8f959b69f8950091ca Error: you can only attach to running containers
なお、Armadilloにssh接続し、「podman exec -it data_uploader /bin/bash」コマンドを実行し、直接コンテナ内に入ろうとしたところこちらも実施できませんでした
以下のようなエラーが表示されています
armadillo:~$ podman exec -it data_uploader /bin/bash ERRO[0000] running `/usr/bin/newuidmap 1672 0 1000 1 1 100000 65536`: newuidmap: Could not set caps Error: cannot set up namespace using "/usr/bin/newuidmap": should have setuid or have filecaps setuid: exit status 1
at_makoto.sato
佐藤です。
> なお、Armadilloにssh接続し、「podman exec -it data_uploader /bin/bash」コマンドを実行し、直接コンテナ内に入ろうとしたところこちらも実施できませんでした
> 以下のようなエラーが表示されています
>
> armadillo:~$ podman exec -it data_uploader /bin/bash > ERRO[0000] running `/usr/bin/newuidmap 1672 0 1000 1 1 100000 65536`: newuidmap: Could not set caps > Error: cannot set up namespace using "/usr/bin/newuidmap": should have setuid or have filecaps setuid: exit status 1 >
こちらに関しては、atmark ユーザーでログインしているため発生しています。
su コマンドなどで root ユーザーになってから実行してみてください。
takeshita_kyouhei
> > 以下のようなエラーが表示されています
> >
> > armadillo:~$ podman exec -it data_uploader /bin/bash > > ERRO[0000] running `/usr/bin/newuidmap 1672 0 1000 1 1 100000 65536`: newuidmap: Could not set caps > > Error: cannot set up namespace using "/usr/bin/newuidmap": should have setuid or have filecaps setuid: exit status 1 > >
> こちらに関しては、atmark ユーザーでログインしているため発生しています。
> su コマンドなどで root ユーザーになってから実行してみてください。
上記回答いただきありがとうございました
もう一方の質問についても回答いただくことは可能でしょうか?
こちらのほうが深刻です
>launch.shに対して、実行権限を付与してみたり、app.confに記載するコマンドを「set_command sh /vol_app/launch.sh」に変更してみましたが、アプリの実行ができません
>以下のようなエラーがVSCode上に表示されます
> * 実行するタスク: ./scripts/run_armadillo.sh > >Warning: Permanently added '192.168.3.67' (ECDSA) to the list of known hosts. >data_uploader.conf 100% 992 448.7KB/s 00:00 >Starting 'data_uploader' >time="2024-03-22T15:26:53+09:00" level=warning msg="The input device is not a TTY. The --tty and --interactive flags might not work properly" >c7554ea94aa86c9b7a0f5fa40c2e93b04d1ae3c1d9aade8f959b69f8950091ca >Error: you can only attach to running containers
at_makoto.sato
佐藤です。
> > * 実行するタスク: ./scripts/run_armadillo.sh > > > >Warning: Permanently added '192.168.3.67' (ECDSA) to the list of known hosts. > >data_uploader.conf 100% 992 448.7KB/s 00:00 > >Starting 'data_uploader' > >time="2024-03-22T15:26:53+09:00" level=warning msg="The input device is not a TTY. The --tty and --interactive flags might not work properly" > >c7554ea94aa86c9b7a0f5fa40c2e93b04d1ae3c1d9aade8f959b69f8950091ca > >Error: you can only attach to running containers
エラーが発生した際、armadilloへログインし "podman logs data_uploader" と実行するとどのようなログが表示されますでしょうか。
takeshita_kyouhei
ABOSWeb上のコンテナログには以下のようなログが記録されていました
sh: 0: cannot open /vol_app/launch.sh: No such file
VSCode上では、/app/srcフォルダ配下にlaunch.shを配置
また、app.confでは以下のように実行を指定しています
# launch app set_command sh /vol_app/launch.sh
ファイル | ファイルの説明 |
---|---|
VSCode.png |
takeshita_kyouhei
at_makoto.sato
takeshita_kyouhei
> 佐藤です。
>
>
> > # launch app > > set_command sh /vol_app/launch.sh >
> 以下のようにするとどうでしょうか。
>
> # launch app > set_command sh /vol_app/src/launch.sh >
上記コマンドでアプリの実行ができるようになりました
しかし、launch.shに記載した「influxdb」と「telegraf」が実行されていないことを確認しています
> python3 /vol_app/src/main.py
> influxd run
> telegraf run
事象としては、アプリの実行時に「main.py」がプロセスを掴んでいるため、以降に記載されたinfluxdやtelegrafが実行できていないものと考えています
→main.pyはソフト内部でループして、一定時間ごとにサーバへjsonデータを送信しています
事実、launch.shに記載するコマンドの順番を以下のように変更すると実行状態が変わりました
> influxd run
> telegraf run
> python3 /vol_app/src/main.py
状態
Influxdb:起動
telegraf:未起動
main.py:未起動
→今度はInfluxdbがプロセスを掴んでいるのか、telegrafやmain.pyが実行できない
現状の実行方法では「main.py」、「Influxdb」、「telegraf」をそれぞれ起動できないと考えているのですが、解決方法はありますでしょうか?
at_makoto.sato
takeshita_kyouhei
返信いただきありがとうございました
> launch.shの中身を以下のようにしてみるとどうでしょうか
>
> #!/bin/sh > python3 /vol_app/src/main.py & > influxd run & > telegraf run >
上記をもとに、以下のように変更を行ってみました
#!/bin/sh influxd run & python3 /vol_app/src/main.py & telegraf run
この設定ですと、ABOSDEからアプリを実行すると「InfluxDB」と「main.py」が実行されることは確認できました
しかし、「Telegraf」が実行されていません
設定している「Telegraf」の宛先(接続先)は同コンテナ内の「InfluxDB」であるため、
「InfluxDB」と「Telegraf」がほぼ同時に起動→「InfluxDB」が起動間もなく、「Telegraf」は宛先がいないため、起動に失敗しエラーで落ちる
この流れで「Telegraf」の起動に失敗しているのではないかと考え、以下のようにlaunch.shを修正してみましたが、変わらず起動に失敗しています
#!/bin/sh influxd run & sleep 5 && python3 /vol_app/src/main.py & telegraf run
現状「Telegraf」が起動しない問題については、「Telegraf起動時に宛先がいない」or「そもそもTelegraf起動のコマンドが間違えている」であると考察・調査中になります
at_makoto.sato
佐藤です。
> 現状「Telegraf」が起動しない問題については、「Telegraf起動時に宛先がいない」or「そもそもTelegraf起動のコマンドが間違えている」であると考察・調査中になります
以下をみると、 telegraf には run というコマンドは無いように見えます。
https://docs.influxdata.com/telegraf/v1/commands/
takeshita_kyouhei
> 以下をみると、 telegraf には run というコマンドは無いように見えます。
> https://docs.influxdata.com/telegraf/v1/commands/
Telegrafを手動で起動する場合は、「service telegraf start」としています
こちらはluanch.shに記載しても認識されるのでしょうか?
at_makoto.sato
佐藤です。
> > 以下をみると、 telegraf には run というコマンドは無いように見えます。
> > https://docs.influxdata.com/telegraf/v1/commands/
> Telegrafを手動で起動する場合は、「service telegraf start」としています
> こちらはluanch.shに記載しても認識されるのでしょうか?
認識されないと思います。
上記サイトを見る限り以下で起動できるように見えます。
telegraf --config <コンフィグファイル>
takeshita_kyouhei
返信いただきありがとうございます
最終的には以下のようになりました
service telegraf start も試行しました(コンテナ内でtelegrafをサービスとして起動するコマンドであるため)が、
コンテナ自体が起動しなくなりました
#!/bin/sh influxd run & sleep 10 && telegraf & sleep 30 && python3 /vol_app/src/main.py
Telegrafを早く起動すると、InfluxDBが立ち上がり切っていないのにデータを書き込もうとしてエラーとなるためタイマーを入れています
また。main.pyはInfluxDBからデータを取得するパイソンプログラムであるため、最後に起動するようにしています
at_makoto.sato
2024年3月22日 9時40分
佐藤です。
すいません。このように複数のset_commandを並べて使うことはできません。
最後のset_commandで上書きされます。
たとえば、以下のような内容のシェルスクリプトを用意して、それを set_command で実行する方法ではどうでしょうか。
これを、launch.sh のようなファイル名で保存して、
set_command (launch.shを置いたディレクトリ)/launch.sh
とします。