デフォルトでは、pipを使用してPythonパッケージをインストールしていますが、実行するとホームディレクトリから設定ファイルを検索し、そこにある情報を使用してログを生成して送信します。
私はMacbookとVirtualBoxのUbuntu VMで実行しています。
問題:Ubuntu Dockerイメージを使用して同じことをしようとしましたが、設定ファイルが見つかりませんでした。
- ディレクトリパスとecho $ PATHの結果は、コンテナと仮想マシンで同じです。
- 構成ファイルは/home/user/にあります。
- Dockerコンテナを起動したときにユーザーがいなかったので、 "useradd -m USERNAME"を使用して作成してsudoを提供しました。
- 構成のユーザーとしてコマンドを実行します。
この問題を引き起こす可能性がある仮想マシンとコンテナの間に根本的な違いはありますか?ユーザーを誤って設定しましたか?
答え1
コンテナ内の作業ディレクトリは、プロセスを実行しているユーザーによって定義されません。ログインが発生していないためです。
価格差についてお問い合わせいただきましたからです。仮想マシンは、カーネルと複数のプロセスを含むオペレーティングシステムを実行しているベアメタルコンピュータをシミュレートします。これらのいくつかは、初期作業ディレクトリなどのユーザー設定と認証を担当します。
一方、コンテナは含む1つ以上のプロセスとファイルがありますが、通常はカーネルやシステム管理者(systemdなど)を実行しません。これは、ファイルセット(実行可能ファイル、ライブラリ、および構成形式)が使用するために提供される栄光のあるchroot環境に似ています。コンテナ内で何でも実行することは、まだホストのカーネルによって異なりますが、他のコンテキストで実行されます。 (Googlecgroup興味があれば)。
簡単に言えば、コンテナの作業ディレクトリは、ユーザーが設定したものがないため、ユーザーが考えているものとは異なります。したがって、いくつかのオプションがあります。
- 設定
WORKDIR
Dockerfileの指示; - 迷惑なことをする
cd /home/user && <command>
- コンテナに必要なすべての項目に絶対パスを使用してください。ほとんどのプログラムは、コマンドラインオプションを設定ファイルへのパスとして使用します。
コンテナは、タスクにコンテナを1つ使用する場合に最も便利です(慣例のようです)。したがって、/home
ファイルを整理してuseradd
。 sudoは必要ありません。コンテナの論理は反対です。イメージをビルドして設定できるように root から始めます。後で、最後のコマンドの前にコンテナの残りの期間(通常はコマンドが終了するまで)、一般ユーザーに権限を放棄できます。
/
デフォルトの作業ディレクトリでもあるルートディレクトリ()に設定をダンプするだけです。使用USER
このコマンドはDockerにこのユーザーとしてプログラムを実行するように指示します。
*上記の段落の2つのリンクは、すべて同じページの他の部分にリンクされています。「Dockerfile作成のベストプラクティス」。これは素晴らしい出発点です。
**コンテナの現在の作業パスを知る必要がある場合は、RUN pwd
Dockerfileのコマンドの前の任意の場所に挿入してください。
編集する:dockerにはpython / pipイメージをビルドする方法の例もあります。 https://docs.docker.com/言語/python/build-images/