回答:
-u
オプションを使用する場合、提供されたデフォルトユーザーの代わりにrootユーザー(ID = 0)を使用してDockerコンテナーにログインできます。例えば
docker exec -u 0 -it mycontainer bash
root(id = 0)はコンテナ内のデフォルトのユーザーです。画像開発者は、追加のユーザーを作成できます。これらのユーザーは名前でアクセスできます。数値IDを渡す場合、ユーザーはコンテナーに存在する必要はありません。
docker run -u 0 -it mycontainer bash
結局、私はDockerイメージを再構築することに決め、ルートパスワードを知っているもので変更しました。
RUN echo 'root:Docker!' | chpasswd
または
RUN echo 'Docker!' | passwd --stdin root
それを行うにはいくつかの方法があります。
USER設定をオーバーライドしてDockerを実行するには
docker exec -u 0 -it containerName bash
または
docker exec -u root -it --workdir / <containerName> bash
Dockerファイルでのイメージのビルド中に必要なファイル権限などを作成します
すべてのパッケージがLinuxイメージで使用できる場合はchpasswd
、USERユーティリティの前のdockerfileで。
非特権ユーザーとしてコンテナーで実行していたため、rootにsuできないというこの問題がまさにありました。
しかし、以前の回答が示唆するように、新しいイメージを再構築したくありませんでした。
代わりに、「nsenter」を使用してルートとしてコンテナにアクセスできることがわかりました。https://github.com/jpetazzo/nsenterを参照してください。
まず、ホスト上のコンテナーのPIDを決定します。
docker inspect --format {{.State.Pid}} <container_name_or_ID>
次に、nsenterを使用してルートとしてコンテナに入ります
nsenter --target <PID> --mount --uts --ipc --net --pid
sudo nsenter --target <PID> --mount --uts --ipc --net --pid
docker exec -u 0 -it containername bash
「ubuntu」ユーザーのパスワードは「ubuntu」です(少なくともubuntuのdockerは14.04.03)。
注意: 'ubuntu'はコンテナーの起動後に作成されるため、これを行うだけの場合:
docker run -i -t --entrypoint /bin/bash ubuntu
rootプロンプトが直接表示されます。そこから、ルートのパスワード変更を強制し、コンテナーをコミットし、オプションで次のようにubuntu:latestに(-fを使用して)タグを付けることができます。
root@ec384466fbbb:~# passwd
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
root@ec384466fbbb:~# exit
% docker commit ec3844
5d3c03e7d6d861ce519fe33b184cd477b8ad03247ffe19b2a57d3f0992d71bca
docker tag -f 5d3c ubuntu:latest
最終的な依存関係をubuntu:latestに再構築する必要があります。
より良い解決策は--add-host NAME:IP
、コンテナーの起動時にdocker runに引数を与えることです。これにより、/etc/hosts/
ルートになる必要なしにファイルが更新されます。
それ以外の場合はUSER
、-u USER
フラグをに設定することで設定を上書きできますdocker run
。ただし、実行中のコンテナーの内容を実際に変更するべきではないので、これはお勧めしません。代わりに、Dockerfileに変更を加えて、新しいイメージをビルドします。
-u
フラグを使用して ユーザーを変更できます。コンテナの中からはできないと思います。
DockerfileでUSER rootコマンドを使用できます。
デフォルトでは、Dockerコンテナはroot
ユーザーとして実行されます。
まだコンテナーを使用している場合は、exit
コマンドを使用してroot
、コンテナーを再度実行する代わりに、(デフォルトユーザー)ユーザーに。
例-
[dev@6c4c86bccf93 ~]$ ls
[dev@6c4c86bccf93 ~]$ other-commands..
[dev@6c4c86bccf93 ~]$ exit
[root@6c4c86bccf93 /]# ls
rootアクセスを取得するには、次のコマンドを試してください
$ sudo -i
場合によっては、ユーザーの下でそのようなことを実行できるようにする必要がありますsudo
(たとえば、コンテナーで実行されているアプリケーションがユーザーにシェルを提供します)。これをDockerfileに追加するだけです。
RUN apt-get update # If necessary
RUN apt-get install sudo # If your base image does not contain sudo.
RUN useradd -m -N -s /bin/bash -u 1000 -p '$1$miTOHCYy$K.c4Yw.edukWJ7z9rbpTZ0' user && \
usermod -aG sudo user # Grant sudo to the user
USER user
これで、デフォルトのイメージユーザーの下で、3行目に設定されたパスワードを使用user
できるようsudo
になります。
docker exec -u 0 -it mycontainer bash
。(参照H6
の答えを)