Armadilloフォーラム

コンテナ起動時のみの実行するスクリプトファイル

m.yoshida

2024年3月6日 15時01分

コンテナ起動時のみに実行するスクリプトファイル実行する方法としてDockerfileに”ENTRYPOINT”を使おうと思いましたが、コンテナが起動しませんでした。
Dockerfile

COPY entrypoint.sh /tmp
RUN mv /tmp/entrypoint.sh /root
RUN chmod +x /root/entrypoint.sh
 
ENTRYPOINT ["/root/entrypoint.sh"]
CMD ["/lib/systemd/systemd"]

PID 1はsystemdを使用したいのですが、コンテナ起動時のみの実行するスクリプトファイルのようなことは可能でしょうか?

コメント

at_makoto.sato

2024年3月6日 17時27分

佐藤です。

何点か教えてください。
> コンテナ起動時のみに実行するスクリプトファイル実行する方法としてDockerfileに”ENTRYPOINT”を使おうと思いましたが、コンテナが起動しませんでした。
コンテナ起動時に何かエラーは表示されますでしょうか。
また、 "podman logs <コンテナ名>" を実行した時の表示はどのようになってますでしょうか。
entrypoint.sh ではどのような処理を行っているのでしょうか。

> PID 1はsystemdを使用したいのですが、コンテナ起動時のみの実行するスクリプトファイルのようなことは可能でしょうか?
systemd を使って具体的に何をしたいのかを教えていただければ、適切なアドバイスができると思います。

m.yoshida

2024年3月7日 11時11分

お世話になります。

> 何点か教えてください。
> コンテナ起動時に何かエラーは表示されますでしょうか。
→テーブルを作成するときのpostgesのエラーがでますが、この処理をなくしたら、なにもエラーがでませんが、コンテナは終了します。

sudo: unable to send audit message: Operation not permitted
psql: error: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?
psql: error: could not connect to server: No such file or directory
        Is the server running locally and accepting
        connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"?

> また、 "podman logs <コンテナ名>" を実行した時の表示はどのようになってますでしょうか。
> entrypoint.sh ではどのような処理を行っているのでしょうか。
→arimadillo A6Eのシリアル取得からファイルに保存とpostgresのデータベース及びテーブル作成の作成を行ってます。

やりたいのは、コンテナ作成した時のみ実行するスクリプトファイル(コマンドなど)をできないかと思ってます。

> > PID 1はsystemdを使用したいのですが、コンテナ起動時のみの実行するスクリプトファイルのようなことは可能でしょうか?
> systemd を使って具体的に何をしたいのかを教えていただければ、適切なアドバイスができると思います。

→sshd や postgresql などのサービス/デーモンを、コンテナ起動時に自動起動するために systemd を使用してます。

at_makoto.sato

2024年3月7日 14時36分

佐藤です。

ENTRYPOINT ["/root/entrypoint.sh"]
CMD ["/lib/systemd/systemd"]

このように書いた場合、"/root/entrypoint.sh" に引数として "/lib/systemd/systemd" が渡されますが、
entrypoint.sh の中で、渡されてきたこの"/lib/systemd/systemd" 実行していますでしょうか。
entrypoint.sh の中で、(dbの初期化などの後に) 「exec "$@"」 を実行するようにするとどうでしょうか。

m.yoshida

2024年3月7日 15時54分

ご回答ありがとうございます。
確かにENTRYPOINT とCMDの関係が理解できてなかったです。

>

> ENTRYPOINT ["/root/entrypoint.sh"]
> CMD ["/lib/systemd/systemd"]
> 

> このように書いた場合、"/root/entrypoint.sh" に引数として "/lib/systemd/systemd" が渡されますが、
> entrypoint.sh の中で、渡されてきたこの"/lib/systemd/systemd" 実行していますでしょうか。
> entrypoint.sh の中で、(dbの初期化などの後に) 「exec "$@"」 を実行するようにするとどうでしょうか。

entrypoint.sh にexec "$@"を入れましたが、うまくできなかったです。

#!/bin/bash
 
mkdir /etc/フォルダ名
echo $AT_PRODUCT_NAME >/etc/フォルダ名/テキスト名.txt
echo $AT_SERIAL_NUMBER >>/etc/フォルダ名/テキスト名.txt
exec "$@"

手順としては

Dockerfileからイメージ化
sudo podman build -t イメージ名 .
イメージからコンテナ
sudo podman run  --name=コンテナ名 --systemd=true  -d  イメージ名  /sbin/init
コンテナの中に入る
sudo podman exec -it  コンテナ名/bin/bash
このときに
Error: can only create exec sessions on running containers: container state improper

と出てしまいコンテナが終了してます。

at_makoto.sato

2024年3月7日 18時02分

佐藤です。

以下でコンテナを起動してみてください。

podman run  --name=コンテナ名 --systemd=always  -d  イメージ名 

m.yoshida

2024年3月7日 18時43分

ご回答ありがとうございます。
以下のコマンドでうごきました。

podman run  --name=コンテナ名 --systemd=always  -d  イメージ名 
 

2点質問があります。
1点目
--systemd=alwaysと --systemd=true の違いは何でしょうか?
2点目
armadillo a6eないの/etc/atmark/containers/のconfigファイルの設定はどのようにすればよろしでしょうか?
( --systemd=alwaysなど対応する箇所がありますか?)

at_makoto.sato

2024年3月7日 19時01分

佐藤です。

> 1点目
> --systemd=alwaysと --systemd=true の違いは何でしょうか?
https://docs.podman.io/en/latest/markdown/podman-run.1.html
systemd モードを有効にすることを強制するためのもののようです。
ENTRYPOINT でsystemdを起動する場合は必要なようです。

> 2点目
> armadillo a6eないの/etc/atmark/containers/のconfigファイルの設定はどのようにすればよろしでしょうか?
> ( --systemd=alwaysなど対応する箇所がありますか?)
add_args --systemd=always
を追加する必要があると思います。

m.yoshida

2024年3月8日 13時27分

ご回答ありがとうございます。
理解できました。
もう1点質問ですが、postgres のデータベース作成をする操作をentrypoint.sh追加してみたところ
作成されせんでした。
コンテナ内にはpostgres をインストールしてます。

#!/bin/bash
 
mkdir /etc/フォルダ名
echo $AT_PRODUCT_NAME >/etc/フォルダ名/テキスト名.txt
echo $AT_SERIAL_NUMBER >>/etc/フォルダ名/テキスト名.txt
 
sudo -u postgres psql <<EOF
CREATE USER name WITH PASSWORD 'pass';
CREATE DATABASE DB_name;
EOF
 
exec "$@"

スクリプトファイル自体は実行すると作成することは確認してます。
よろしくお願いします。

m.yoshida

2024年3月8日 15時04分

postgresqlサービスが立ち上がってないだけでした。
お騒がせしました。