2017-01-25 3 views
0

私はGitHubに介して、プライベートリポジトリNPMパッケージをインストールしようとしています:Dockerコンテナー非rootユーザーでGitHubプライベート・リポジトリーをクローンする?

npm install --save-dev MyCompany/MyRepository#my-branch 

それは私のホストシステムに適しています。ただし、docker-composeを使用してDockerのすべてのコンテナを整理します。特にnodeです。

当社のGitHubリポジトリはプライベート1つであるので、私はdocker-compose.ymlスニペット(簡体字)、次のようにSSHエージェント転送を設定を示しています

version: '2' 

services: 
    node: 
     build: docker/node 
     environment: 
      - SSH_AUTH_SOCK=/ssh-agent 
     volumes: 
      - $SSH_AUTH_SOCK:/ssh-agent 
     user: "${UID}:${GID}" 

私たちは、ファイルのパーミッションでいくつかの問題を防ぐために、ホストUIDとGIDを使用しています。これらの変数は、docker-compose runコマンドを起動する前にエクスポートされます。しかし

、私たちは私たちのコンテナからinstallコマンドを起動してみてください:

docker-compose run --rm --no-deps node bash -ci 'npm install' 

私たちは、接続の問題(Error connecting to repository. Please, check the url.)を得ました。私たちは今、SSH接続の問題を取得

docker-compose run --rm --no-deps node bash -ci 'ssh -T [email protected]' 

そして:

んが、ユーザーがUID 1000年

のために存在していないことが関係している

私たちは、直接SSH接続をテスト?よく分かりません。

解決策の1つは、コマンドを起動する前にホストUIDを使用してダミーユーザーを作成することです。それでも、どうすれば作れますか? (私はUID環境変数へのアクセスを持っていないとして)私は、ビルド時にそれを行うことができず、コマンドを実行するときに、私がしようとした場合、私が得た:

docker-compose run --rm --no-deps node bash -ci "sudo" 
sudo: unknown uid 1000: who are you? 

またはその他のソリューションがありますか?

+0

"ファイルアクセス権に関するいくつかの問題を防ぐためにホストUIDとGIDを使用しています"という例がありますか? – Salem

+0

'user:" $ {UID}:$ {GID} "'行なしではどのように動作しますか? –

+0

私は、この '$ {UID}:$ {GID}'の部分と私が見つけた解決策についてブログ記事を書いています:https://www.jonathan-petitcolas.com/2017/01/26/yarn-npm -install-within-docker-container.html –

答えて

4

私はついにそれを機能させることに成功しました。それは簡単ではありませんが、ここでは解決策です。

まず、ドッカー作成用のコンテナを使用せず、代わりに自分のイメージに基づいて新しいコンテナを実行します。私は、SSHエージェントのシェアを保持:私はSSHエージェントの共有(SSH_AUTH_SOCK部品)を維持し、我々はそれが容器の中に私たちのダミーユーザを作成する必要があるとして、ホストユーザーのUUIDで環境変数を追加し

USER_ID=$(id -u) 
docker run --rm -it \ 
    -v `pwd`:/app \ 
    -v $(SSH_AUTH_SOCK):/ssh_agent \ 
    -e SSH_AUTH_SOCK=/ssh_agent \ 
    -e USER_ID=$USER_ID \ 
    my_project_node bash -ci "/app/bin/yarn.sh" 

は注意、維持します正しいファイルのアクセス許可。

/app/bin/yarn.shファイルは以下の通りです:

#!/bin/bash 

useradd -u $USER_ID dummy 
mkdir -p /home/dummy/.ssh /home/dummy/.npm 
chown -R dummy /home/dummy 
cat /app/docker/node/.ssh_config > /home/dummy/.ssh/config 
su dummy -c 'npm install' 

ここのトリックは、ホスト・システム上と同じUUIDを持つダミーのユーザーを作成することです。次に、ダミーが所有する必要なフォルダをいくつか追加します。次に、.ssh/configファイルを追加して、GitHubホストチェックを防止します。これによりnpmが失敗します。その内容は次のとおりです。

Host github.com 
    StrictHostKeyChecking no 

このソリューションは他の開発者には優れているとは思えません。 :)

+0

私は重たい作業をやっている少し大きめの機能を持っていますが、これはかなりの答えではありませんが、このコメントに収まります。 https://github.com/tianon/gosu/issues/40#issuecomment-336324805をチェックし、あなたの答えを改善する可能性のあるものがあるかどうかを確認してください。 gosuのメンテナーとDockerで仕事をしている方もいらっしゃいますので、いくつかの良いヒントやテクニックがあります。 – dragon788

関連する問題