389

通常、docker コンテナーはユーザーrootを使用して実行されます。別のユーザーを使用したいのですが、docker の USER ディレクティブを使用しても問題ありません。ただし、このユーザーはコンテナー内でsudoを使用できる必要があります。このコマンドがありません。

この目的のための単純な Dockerfile を次に示します。

FROM ubuntu:12.04

RUN useradd docker && echo "docker:docker" | chpasswd
RUN mkdir -p /home/docker && chown -R docker:docker /home/docker

USER docker
CMD /bin/bash

このコンテナーを実行すると、ユーザー「docker」でログインします。sudo を使用しようとすると、コマンドが見つかりません。だから私は自分のDockerfile内にsudoパッケージをインストールしようとしました

RUN apt-get install sudo

これにより、パッケージ sudo が見つかりません

4

11 に答える 11

320

ちょうどそれを手に入れました。Regan が指摘したように、ユーザーを sudoers グループに追加する必要がありました。しかし、主な理由は、リポジトリのキャッシュを更新するのを忘れていたため、apt-get が sudo パッケージを見つけられなかったことです。それは今働いています。完成したコードは次のとおりです。

FROM ubuntu:12.04

RUN apt-get update && \
      apt-get -y install sudo

RUN useradd -m docker && echo "docker:docker" | chpasswd && adduser docker sudo

USER docker
CMD /bin/bash
于 2014-09-18T08:51:30.117 に答える
19


コンテナに接続し、上記のように最初にapt-get を使用して何かをインストールしたい場合は
、私たちの兄弟「Tomáš Záluský」からの回答

docker exec -u root -t -i container_id /bin/bash

それから試してみてください

apt-get update または apt-get 'anything you want' を実行します

それは私と一緒に働いた

于 2018-04-29T10:10:59.827 に答える
2

コマンドへのアクセスが必要なスクリプト (変更不可) を実行するルートとしてコンテナーを実行している場合は、渡されたコマンドを呼び出すsudo新しいsudoスクリプトを簡単に作成できます。$PATH

たとえば、Dockerfile で:

RUN if type sudo 2>/dev/null; then \ 
     echo "The sudo command already exists... Skipping."; \
    else \
     echo -e "#!/bin/sh\n\${@}" > /usr/sbin/sudo; \
     chmod +x /usr/sbin/sudo; \
    fi
于 2018-08-01T23:51:17.720 に答える