エントリポイントからホストで Docker を実行しているユーザー GUI と UID を動的に選択します

レイニエPM

Dockerfile、つまり Docker イメージの ENTRYPOINT として次のスクリプトがあります。

#!/bin/bash
set -e

# Setup permissions
data_dir="/var/www/html"

usermod -u 1000 www-data && groupmod -g 1000 www-data
chown -R www-data:root "$data_dir"

if  [ -d "$data_dir" ]; then
    chgrp -R www-data "$data_dir"
    chmod -R g+w "$data_dir"
    find "$data_dir" -type d -exec chmod 2775 {} +
    find "$data_dir" -type f -exec chmod ug+rw {} +
fi 

# Enable rewrite
a2enmod rewrite expires

# Apache gets grumpy about PID files pre-existing
rm -f /var/run/apache2/apache2.pid

source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND "$@"

ほとんどのディストリビューションの GUI と UID は1000(Fedora と Ubuntu を使用している) 、Linux ではすべて正常に動作していますWindows - 私は - 私はそれを気にしていないと思いますが、スクリプトは適切に機能し、すべてがうまくいきます。

最初のユーザーの GUI と UID が500. これにより、アクセス許可が正しく機能しなくなります。

いつでも値を500から1000に変更できることは知っていますが....

スクリプト内からこれを取得して、ユーザーに対して透過的にする方法はありますか?

更新

以下の回答によると、これは私のスクリプトがどのように見えるかです:

#!/bin/bash
set -e

# Setup permissions
data_dir="/var/www/html"

usermod -u ${UID} www-data && groupmod -g ${GUID} www-data

chown -R www-data:root "$data_dir"

if  [ -d "$data_dir" ]; then
    chgrp -RH www-data "$data_dir"
    chmod -R g+w "$data_dir"
    find "$data_dir" -type d -exec chmod 2775 {} +
    find "$data_dir" -type f -exec chmod ug+rw {} +
fi

# Enable rewrite
a2enmod rewrite expires

# Apache gets grumpy about PID files pre-existing
rm -f /var/run/apache2/apache2.pid

source /etc/apache2/envvars && exec /usr/sbin/apache2 -DFOREGROUND "$@"

UIDまたは を定義していない場合はどうなりGUIDますか? 1000:1000(最初に作成されたユーザー)としてデフォルト値に依存する方法はありますか?

エリック・ダネンバーグ

最善の策は、起動スクリプトで処理できる Docker コンテナーに (オプションの) 環境変数を渡すことです。

docker-compose.yml:

version: '2.1'
services:
  www:
    image: somenginx
    environment:
      - ${UID}
      - ${GID}

次に$UID/$GID、エントリポイント スクリプトの値を使用して、ユーザーの uid/gid を更新します。

残念ながら、docker-compose は現在のユーザーの UID/GID を参照する基本的な機能を提供しないため (関連する問題)、このアプローチでは、各ユーザーが環境変数がホストに存在することを確認する必要があります。~/.bashrcそれを処理するスニペットの:

export UID
export GID="$(id -g $(whoami))"

最適ではありませんが、現時点では、docker/docker-compose 以外のホスト オーケストレーションがない限り、これ以上の方法はありません。たとえば、コンテナーの開始を処理するシェル スクリプトは、これを簡単にします。別のアプローチは、docker-compose をラップし、コンテナーが開始される前に現在の UID/GID を挿入する gradle などの外部ビルド ツールを使用して、docker-compose.yml をテンプレート化することです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Dockerコンテナー内でホストユーザーとして実行

分類Dev

Dockerコンテナ内でホストユーザーとして実行する

分類Dev

非rootユーザーとしてDocker内でアプリを実行する

分類Dev

Dockerイメージをrootユーザーとして実行し、サービスを非rootユーザーとして実行する

分類Dev

Swiftを使用して、キーとして一意のUIDを使用してFirebaseのユーザーにクエリを実行する

分類Dev

変数とGUIからのユーザー入力を使用してコードを実行するPythontkinter

分類Dev

別の(root以外の)ユーザーとしてGUIアプリケーションを実行する

分類Dev

UIDとグループを保持しながら、非共有名前空間で非rootユーザーとしてバインドマウントを実行することは可能ですか?

分類Dev

カスタムユーザーとして実行しているDockerでASP.NETCoreアプリを実行する

分類Dev

「エラー:ディスプレイを開けません:: 0」-GUIアプリを別のユーザーとして実行しています

分類Dev

コンテナーとしてDockerイメージを実行する(Windowsユーザーの場合)

分類Dev

別のユーザー(Debian)としてGUIプログラムを実行するにはどうすればよいですか?

分類Dev

別のユーザー(Debian)としてGUIプログラムを実行するにはどうすればよいですか?

分類Dev

特定のUIDを使用してホストシステムとDockerコンテナ間でファイルを共有する

分類Dev

ホームディレクトリ/ dev / nullのないシステムユーザーとしてdockerを実行中にエラーが発生しました:ディレクトリではありません

分類Dev

ubuntu14.04を使用してPythonPyQt4アプリケーションのDockerイメージを作成しました。コンテナーを実行すると、DockerホストのIPとインターフェイスにアクセスしたい

分類Dev

不明なユーザーIDとして実行されているDockerイメージはrootファイルを削除できます

分類Dev

Docker:他のユーザーはデフォルトで私のユーザーとしてコンテナーを実行します

分類Dev

PowerShellスクリプトをDockerコンテナのエントリポイントとして指定するにはどうすればよいですか?

分類Dev

管理者以外のユーザーセッションから管理者としてGUIを使用してアプリケーションを実行するにはどうすればよいですか?

分類Dev

mysqlクライアントを使用してdockerホストからdockerコンテナーとして実行されているMysql 5.7に接続できません

分類Dev

GUIプログラムを別のユーザーとして実行しても安全ですか?

分類Dev

ユーザーがドラッグして選択を行い、選択したテキストを取得するときに関数を呼び出します

分類Dev

MacBookProホストを使用してDockerコンテナでGUIアプリを実行する

分類Dev

シェルスクリプトを使用してLinuxで複数のユーザー名とUIDを作成する

分類Dev

Dockerは、ホストからコンテナー内のUID / GIDを複製します

分類Dev

Pythonスクリプトからスーパーユーザーとしてコマンドを実行する

分類Dev

DockerfileはホストユーザーのUIDとGIDをイメージに複製します

分類Dev

Docker内のUbuntuで非rootユーザーとしてcronジョブを実行する方法

Related 関連記事

  1. 1

    Dockerコンテナー内でホストユーザーとして実行

  2. 2

    Dockerコンテナ内でホストユーザーとして実行する

  3. 3

    非rootユーザーとしてDocker内でアプリを実行する

  4. 4

    Dockerイメージをrootユーザーとして実行し、サービスを非rootユーザーとして実行する

  5. 5

    Swiftを使用して、キーとして一意のUIDを使用してFirebaseのユーザーにクエリを実行する

  6. 6

    変数とGUIからのユーザー入力を使用してコードを実行するPythontkinter

  7. 7

    別の(root以外の)ユーザーとしてGUIアプリケーションを実行する

  8. 8

    UIDとグループを保持しながら、非共有名前空間で非rootユーザーとしてバインドマウントを実行することは可能ですか?

  9. 9

    カスタムユーザーとして実行しているDockerでASP.NETCoreアプリを実行する

  10. 10

    「エラー:ディスプレイを開けません:: 0」-GUIアプリを別のユーザーとして実行しています

  11. 11

    コンテナーとしてDockerイメージを実行する(Windowsユーザーの場合)

  12. 12

    別のユーザー(Debian)としてGUIプログラムを実行するにはどうすればよいですか?

  13. 13

    別のユーザー(Debian)としてGUIプログラムを実行するにはどうすればよいですか?

  14. 14

    特定のUIDを使用してホストシステムとDockerコンテナ間でファイルを共有する

  15. 15

    ホームディレクトリ/ dev / nullのないシステムユーザーとしてdockerを実行中にエラーが発生しました:ディレクトリではありません

  16. 16

    ubuntu14.04を使用してPythonPyQt4アプリケーションのDockerイメージを作成しました。コンテナーを実行すると、DockerホストのIPとインターフェイスにアクセスしたい

  17. 17

    不明なユーザーIDとして実行されているDockerイメージはrootファイルを削除できます

  18. 18

    Docker:他のユーザーはデフォルトで私のユーザーとしてコンテナーを実行します

  19. 19

    PowerShellスクリプトをDockerコンテナのエントリポイントとして指定するにはどうすればよいですか?

  20. 20

    管理者以外のユーザーセッションから管理者としてGUIを使用してアプリケーションを実行するにはどうすればよいですか?

  21. 21

    mysqlクライアントを使用してdockerホストからdockerコンテナーとして実行されているMysql 5.7に接続できません

  22. 22

    GUIプログラムを別のユーザーとして実行しても安全ですか?

  23. 23

    ユーザーがドラッグして選択を行い、選択したテキストを取得するときに関数を呼び出します

  24. 24

    MacBookProホストを使用してDockerコンテナでGUIアプリを実行する

  25. 25

    シェルスクリプトを使用してLinuxで複数のユーザー名とUIDを作成する

  26. 26

    Dockerは、ホストからコンテナー内のUID / GIDを複製します

  27. 27

    Pythonスクリプトからスーパーユーザーとしてコマンドを実行する

  28. 28

    DockerfileはホストユーザーのUIDとGIDをイメージに複製します

  29. 29

    Docker内のUbuntuで非rootユーザーとしてcronジョブを実行する方法

ホットタグ

アーカイブ