Armadilloフォーラム

コンテナ起動時にコンテナ内にインストールしたSSH、 postgresqlなど自動起動する方法

m.yoshida

2023年12月8日 14時14分

コンテナ起動時にコンテナ内にインストールした後に
再度コンテナを起動する場合にSSH、 postgresqなど起動しません。
何か方法ありますでしょうか?

コメント

アットマークテクノの古賀です。

m.yoshida
>コンテナ起動時にコンテナ内にインストールした後に
>再度コンテナを起動する場合にSSH、 postgresqなど起動しません。
>何か方法ありますでしょうか?

次の方法でやってみて下さい。

1.) コンテナ内に、自動起動したいプログラムの起動コマンド列と、末尾行に 'sleep infinity' を記載したスクリプトを作る。
2.) podman commit コマンドで、コンテナ内容をイメージに保存する。
3.) (2) のコンテナイメージから生成・起動するコンテナの .conf ファイルを作って /etc/atmark/containers/ に配置する。
4.) (3) の .conf ファイルの set_command 行で、(1) のスクリプトを実行コマンドとして指定する。
5.) ABOS の podman_start コマンドで、(3) のコンテナを生成・起動する。

たとえば、次のような感じです:

/ # cat - << EOF > /startup.sh
#!/bin/sh
 
/usr/sbin/sshd
sudo -u postgres /usr/lib/postgresql/13/bin/postgres -D /etc/postgresql/13/main
sleep infinity
EOF
 
/ # chmod +x /startup.sh
/ # exit
 
armadillo:~# podman stop <コンテナ名>
armadillo:~# podman commit <コンテナ名> <コンテナイメージ名>
armadillo:~# vi /etc/atmark/containers/<コンテナ名>.conf
set_image 行と set_command 行を書き換える
 
armadillo:~# podman_start <コンテナ名>

いかがでしょうか?

アットマークテクノ 古賀様

sudo -u postgres /usr/lib/postgresql/13/bin/postgres -D /etc/postgresql/13/main

上記の箇所実行結果後

LOG:  42501: could not change directory to "/root": Permission denied
LOCATION:  resolve_symlinks, exec.c:321

などと出ますが、対処方法ありますでしょうか?

アットマークテクノの古賀です。

m.yoshidaさん:

sudo -u postgres /usr/lib/postgresql/13/bin/postgres -D /etc/postgresql/13/main

>上記の箇所実行結果後

LOG:  42501: could not change directory to "/root": Permission denied
LOCATION:  resolve_symlinks, exec.c:321

>などと出ますが、対処方法ありますでしょうか?

'sudo -u' を 'sudo -Hiu' に変えると、どうなるでしょうか?

アットマークテクノ 古賀様
> 'sudo -u' を 'sudo -Hiu' に変えると、どうなるでしょうか?

2023-12-13 06:22:03.694 UTC [33] LOG:  starting PostgreSQL 13.13 (Debian 13.13-0+deb11u1) on arm-unknown-linux-gnueabihf, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 32-bit
2023-12-13 06:22:03.700 UTC [33] LOG:  listening on IPv6 address "::1", port 5432
2023-12-13 06:22:03.702 UTC [33] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2023-12-13 06:22:03.730 UTC [33] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-12-13 06:22:03.765 UTC [35] LOG:  database system was shut down at 2023-12-13 06:12:56 UTC
2023-12-13 06:22:03.840 UTC [33] LOG:  database system is ready to accept connections

上記のログが表示されました。

アットマークテクノの古賀です。

m.yoshidaさん:
>>'sudo -u' を 'sudo -Hiu' に変えると、どうなるでしょうか?
>

2023-12-13 06:22:03.694 UTC [33] LOG:  starting PostgreSQL 13.13 (Debian 13.13-0+deb11u1) on arm-unknown-linux-gnueabihf, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 32-bit
2023-12-13 06:22:03.700 UTC [33] LOG:  listening on IPv6 address "::1", port 5432
2023-12-13 06:22:03.702 UTC [33] LOG:  listening on IPv4 address "127.0.0.1", port 5432
2023-12-13 06:22:03.730 UTC [33] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
2023-12-13 06:22:03.765 UTC [35] LOG:  database system was shut down at 2023-12-13 06:12:56 UTC
2023-12-13 06:22:03.840 UTC [33] LOG:  database system is ready to accept connections

>上記のログが表示されました。

postresql が起動して接続待ちになったように見えますね。
これで問題ないように思えますが、もし、

sudo -Hiu postgres /usr/lib/postgresql/13/bin/postgres -D /etc/postgresql/13/main

をシェルから対話実行されて、シェルプロンプトが出ないので以後の操作ができない、という場合には、

sudo -Hiu postgres /usr/lib/postgresql/13/bin/postgres -D /etc/postgresql/13/main &

のようにして、バックグランド実行してみてくださいませ。
いかがでしょうか?

アットマークテクノ 古賀様

> をシェルから対話実行されて、シェルプロンプトが出ないので以後の操作ができない、という場合には、
>

> sudo -Hiu postgres /usr/lib/postgresql/13/bin/postgres -D /etc/postgresql/13/main &
> 

> のようにして、バックグランド実行してみてくださいませ。

上記で対応できました。ご対応いただきありがとうございます。