sudo -u postgres
.を使用してコンテナ内ですべてのpostgresqlコマンドを実行しようとしていますsudo
。
sudo
一部のpostgresはrootとして実行されないため、これを最初に実行する必要があります。
root@473f05e08ea1:/# pg_ctl
pg_ctl: cannot be run as root
だから使用sudo -u postgres
ここで提案されているように。直面する最初の問題は、PATH
sudo以降のenv変数が異なり、postgresコマンドが見つからないことです。
root@473f05e08ea1:/# sudo -u postgres pg_ctl
sudo: pg_ctl: command not found
検索して使用できます。-Eオプション継承するPATH
:
root@473f05e08ea1:/# sudo -u postgres -E env "PATH=$PATH" pg_ctl
pg_ctl: no operation specified
これが私を気にする:
PGDATA
すべての環境変数(などをPGOPTIONS
含む)を継承する方法はありますかHOME
?それとも試行錯誤を経て一つずつ受け継がれるべきですか?
関連:
sudoとsuを介して実行するときにPATH変数が異なるのはなぜですか?
- 更新 -
出力はdiff -u <(sudo -E env) <(env)
次のとおりです
root@2f8a4b93e1da:/# diff -u <(sudo -E env) <(env)
--- /dev/fd/63 2023-03-18 20:36:44.898156660 +0000
+++ /dev/fd/62 2023-03-18 20:36:44.898156660 +0000
@@ -8,12 +8,5 @@
TERM=xterm
SHLVL=1
PGDATA=/var/lib/postgresql/data
-PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-_=/usr/bin/sudo
-LOGNAME=root
-USER=root
-SHELL=/bin/bash
-SUDO_COMMAND=/usr/bin/env
-SUDO_USER=root
-SUDO_UID=0
-SUDO_GID=0
+PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/postgresql/15/bin
+_=/usr/bin/env
答え1
2番目のコマンドは
sudo -u postgres -E env "PATH=$PATH" pg_ctl
正常に運営されています。
pg_ctl
エラーメッセージが示すように、コマンドのオプションを指定していません。
これを明確にするために、
su -l postgres
その後、コマンドを実行します。
/usr/lib/postgresql/15/bin/pg_ctl
または
su -l postgres
それから
export PATH=/usr/lib/postgresql/15/bin:$PATH
続いて
pg_ctl
同じ理由で同じエラーが発生します。
pg_ctl
使用中に使用できるオプションの詳細については、マニュアルページを参照してください。