2016-09-27 4 views
2

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に変換してライブラリをインストールしたいと思います。

さらに多くの情報がありますが、これは非常に混乱しています。私はそれらの変更を行うために助けることができます:ユーザーを作成し、その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で

答えて

0

- ユーザーを作成しRUNコマンドを使用します。

RUN useradd userToRunComposer 

そして、それを作成した後、あなたのDockerfileでUSERコマンドを使用します。

USER userToRunComposer 
RUN curl -sS https://getcomposer.org/instal... 
RUN composer global require se... 

また、イメージ犯し、容器内のユーザーを作成することによって、異なるアプローチを取ることができる:

docker exec -ti <my container name> /bin/bash 
userAdd userToRunComposer 

をそして実行します。docker commit <my container id> <myimagename>は毎回のユーザーを作成することを避けるために

私は、私はRUNがuserToRunComposer`は、次のディレクトリ `/ホーム/ userToRunComposer`を作成します。useraddを`と信じthis question.

+0

を参照してください。そうですか?もしそうなら、このユーザーは作曲家の仕事のためだけに生きるか、それとも最終的なイメージを維持しますか? '/ home/userToRunComposer'にダウンロードされたコンテンツはどうなりますか? – ReynierPM

+0

OPのアップデートを見て、あなたの提案された変更に関する出力を追加しました – ReynierPM

+0

コンテンツを非ボリュームマウントされたディレクトリに保存/作成されます – STLMikey

関連する問題