2017-06-19 13 views
2

私はローカル開発のニーズに対応するドッカーファイルを作成しています。このファイルは、パスワードとしてuseruserアカウントを作成します。私は動作するはずだと思うの行は次のようになります。私は、コンテナその中からsudo -S chmod 777 ~を実行するとDockerfileから `sudo`にパスワードを送る方法

mkdir: cannot create directory ‘/home/.meteor-install-tmp’: Permission 
denied 

:私はイメージを実行したときに

# allow writes to the home directory 
RUN echo "user" | sudo -S chmod 777 ~ 

しかし対話的に私が、このメッセージが表示され、それが&を失敗したようです働く

# docker build -t timebandit/meteor-1-5 --rm . 
# docker run -v /host/path:/home/code -it timebandit/meteor-1-5 bash 

FROM ubuntu:xenial 

# update the system 
RUN apt-get update && apt-get -y install curl \ 
sudo \ 
apt-utils \ 
locales \ 
nano 

# Set the locale 
RUN sudo sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' 
/etc/locale.gen && \ 
locale-gen 
ENV LANG en_US.UTF-8 
ENV LANGUAGE en_US:en 
ENV LC_ALL en_US.UTF-8 

# set the root password 
RUN echo "root:root" | chpasswd 


# create a user 
RUN useradd -ms /bin/bash user 
RUN adduser user sudo 
RUN echo 'user:user' | chpasswd 

ENV HOME=/home 
WORKDIR $HOME/user 

USER user 
# allow writes to the home directory 
ARG user_pass 
RUN echo $user_pass | sudo --stdin chmod 777 /home 

# install meteor 
RUN echo $user_pass | sudo curl https://install.meteor.com/ | sh 
+0

通常、ドッカーの画像には、sudoはインストールされていません。あなたはsudoなしで試しましたか? – German

+0

@German、私はDockerファイルをさらに上にインストールしました – timebandit

答えて

2

~は、ユーザのホームディレクトリではなく、/homeディレクトリ自体である:

はここで完全なスクリプトです。

ので/homeのために同じ操作を行います。

RUN echo "user" | sudo -S chmod 777 /home 

は私はあなたが通常落胆されている2つの事柄(Dockerfileと777のパーマにパスワードを)持っていることを教えてみましょう。

そして@meatspaceはあなたがドッキングウィンドウは、引数を構築し使用することを示唆しているよう:

ARG user_pass 
RUN echo $user_pass | sudo -S chmod 777 /home 

そして、これを使用してビルド:

docker build --build-arg user_pass=user (and the rest of the command) 
+0

特に 'build-arg'が存在するようになったので(https://docs.docker.com/engine/reference/commandline/build/)、あなたは本当に秘密Dockerfileにあります。 – meatspace

+0

これはより洗練されたソリューションに見えました@BMitchの解決策は、彼の考えよりもスクリプトのほうが多いかもしれませんが、 – timebandit

+0

パスワードがコマンドから渡されているポイントをファイルがビルドするときに、ビルドの進行状況出力に 'red 'と表示されます – timebandit

5

あなたを持つユーザーを変更することができますので、私は完全にsudoをスキップお勧めしますドッカーファイル:

.... 
# allow writes to the home directory 
USER root 
RUN chmod 777 /home 
USER user 
.... 

あなたの画像にsudoを追加することを意味しますそれは攻撃者が使用するためのものです。 またはdocker execコマンドのユーザを-u rootオプションで変更するには、rootとしてコンテナに戻る必要があるときはいつでも変更できます。

+0

良い答え。そして、あなたは全くパスワードを操作する必要はありません – Robert

+0

それはいくつかの進歩を遂げましたが、「アクセス」問題は別の場所に行きました。今すぐ '{エラー:SQLite_CANTOPEN:データベースファイルを開くことができませんでした。errno:14、コード: 'SQLITE_CANTOPEN'}というエラーが発生しました。スクリプトの現在の状態は次のようになっています:https://pastebin.com/RDMK546U – timebandit

+0

あなたのDockerfileをビルドすることができませんでしたが、まったく異なる流星のエラーのためです。私は流星に精通していないので、他の人が見ることができる新しい質問として最もよく尋ねられます。 – BMitch

関連する問題