Dockerを学び、イメージとコンテナを処理する方法を続けています。私は仕事で私に使用されるイメージに取り組んでいます。これは、Dockerfile
:特定のプロセスの開発環境でdockerをroot以外のユーザーとして実行する
FROM ubuntu:trusty
...
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
chown www-data /usr/local/bin/composer && composer --version
RUN composer global require sebastian/phpcpd && \
composer global require phpmd/phpmd && \
composer global require squizlabs/php_codesniffer
...
それは動作しますが、私はイメージを構築するたびに、私は全然悪くないですrootユーザーとして作曲実行に関する迷惑なメッセージを見ていますが、私は楽しみのためだけでこの動作を変更したいです:)と学ぶ。
私はこのタスクを実行するためにユーザーdocker-dev
を作成して保持したいと考えています(別の用途のために、多分他の仕事のために)。このユーザーにはhome
ディレクトリがあり、composer
にライブラリをグローバルにインストールする必要がありますが、このユーザーのホームディレクトリにインストールする必要があります。
現在、コンポーザーは/root/.composer
にインストールされており、すべてのライブラリがそこにインストールされています。/home/docker-dev/.composer
に変換してライブラリをインストールしたいと思います。
- http://www.projectatomic.io/docs/docker-image-author-guidance/
- https://github.com/airdock-io/docker-base/wiki/How-Managing-user-in-docker-container
- http://blog.dscpl.com.au/2015/12/overriding-user-docker-containers-run-as.html
- Running app inside Docker as non-root user
- http://www.yegor256.com/2014/08/29/docker-non-root.html
- How to run Docker commands as non-root user in Docker in Docker? :
は、私はこのトピックに関するドキュメントをたくさん読みました
さらに多くの情報がありますが、これは非常に混乱しています。私はそれらの変更を行うために助けることができます:ユーザーを作成し、そのDockerfileのホームディレクトリの下に作曲家のライブラリをインストールするには?
注:Dockerfileから無関係な部分を削除して、投稿が長すぎないようにしました。
更新
これを提供するソリューションは、私は成功せずしようとしたものです後:
# This still running as root because we need to move composer to /user/local/bin
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
chown www-data /usr/local/bin/composer && composer --version
# I am adding a docker-dev user
RUN useradd docker-dev
# Switch to RUN the next command as the recently created user
USER docker-dev
# Run the command in verbose mode (just for debug)
RUN composer global --verbose require sebastian/phpcpd && \
composer global --verbose require phpmd/phpmd && \
composer global --verbose require squizlabs/php_codesniffer
をそして、これは、コンソールから出力されます。
Step 8 : RUN composer global --verbose require sebastian/phpcpd && composer global --verbose require phpmd/phpmd && composer global --verbose require pdepend/pdepend && composer global --verbose require squizlabs/php_codesniffer && composer global --verbose require phpunit/phpunit
---> Running in 0f203e1760a4
[ErrorException]
chdir(): No such file or directory (errno 2)
Exception trace:
() at phar:///usr/local/bin/composer/src/Composer/Command/GlobalCommand.php:74
Composer\Util\ErrorHandler::handle() at n/a:n/a
chdir() at phar:///usr/local/bin/composer/src/Composer/Command/GlobalCommand.php:74
Composer\Command\GlobalCommand->run() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:847
Symfony\Component\Console\Application->doRunCommand() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:192
Symfony\Component\Console\Application->doRun() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:231
Composer\Console\Application->doRun() at phar:///usr/local/bin/composer/vendor/symfony/console/Application.php:123
Symfony\Component\Console\Application->run() at phar:///usr/local/bin/composer/src/Composer/Console/Application.php:104
Composer\Console\Application->run() at phar:///usr/local/bin/composer/bin/composer:43
require() at /usr/local/bin/composer:24
global <command-name> [<args>]...
私はわかりません問題がパーミッションであれば、どう思いますか?あなたのDockerfileで
を参照してください。そうですか?もしそうなら、このユーザーは作曲家の仕事のためだけに生きるか、それとも最終的なイメージを維持しますか? '/ home/userToRunComposer'にダウンロードされたコンテンツはどうなりますか? – ReynierPM
OPのアップデートを見て、あなたの提案された変更に関する出力を追加しました – ReynierPM
コンテンツを非ボリュームマウントされたディレクトリに保存/作成されます – STLMikey