Dockerコンテナー内のrootパスワード


265

と呼ばれる非rootユーザーを使用するためにUSERコマンドを使用して構築されたDockerイメージを使用していますdev。コンテナ内では「dev」ですが、/etc/hostsファイルを編集したいと思います。

だから私はルートになる必要があります。suコマンドを試していますが、rootパスワードの入力を求められます。

Dockerコンテナー内のデフォルトのrootユーザーのパスワードは何ですか?


11
ルートとして実行するだけですdocker exec -u 0 -it mycontainer bash。(参照H6の答えを)
SławomirLenart

回答:


495

-uオプションを使用する場合、提供されたデフォルトユーザーの代わりにrootユーザー(ID = 0)を使用してDockerコンテナーにログインできます。例えば

docker exec -u 0 -it mycontainer bash

root(id = 0)はコンテナ内のデフォルトのユーザーです。画像開発者は、追加のユーザーを作成できます。これらのユーザーは名前でアクセスできます。数値IDを渡す場合、ユーザーはコンテナーに存在する必要はありません。

Dockerドキュメントから


5
上記のカンマを入力するときに、mycontainerを起動して実行する必要があることを指定すると便利です。2つの異なる端末を使用して機能します。1つはmycontainer用で、もう1つはこのコマンド用です。それ以外の場合は、mycontainerが切り離された状態で実行されている必要があります。
nicolimo86 2016年

6
画像の場合、使用docker run -u 0 -it mycontainer bash
Pavel 'PK' Kaminsky '27

2
これがトップになるはずの答えです
Dピント

1
@ High6、「Dockerイメージにログインできます...」と言ったとき、「Docker コンテナにログインできます」という意味だと思います。
lmiguelvargasf

これは常に可能ですか?またはこれをブロックできますか?
サムトーマス

82

結局、私はDockerイメージを再構築することに決め、ルートパスワードを知っているもので変更しました。

RUN echo 'root:Docker!' | chpasswd

または

RUN echo 'Docker!' | passwd --stdin root 

5
私はこれを試しましたが、私のCentOS 6ベースのDockerでは動作しません。このコマンドはCentOSベースのDockerで機能しますか?
Dragan Nikolic

28

それを行うにはいくつかの方法があります。

  1. USER設定をオーバーライドしてDockerを実行するには

    docker exec -u 0 -it containerName bash
    

または

docker exec -u root -it --workdir / <containerName> bash
  1. Dockerファイルでのイメージのビルド中に必要なファイル権限などを作成します

  2. すべてのパッケージがLinuxイメージで使用できる場合はchpasswd、USERユーティリティの前のdockerfileで。



23

以下のコマンドで動作させることができます。

root@gitnew:# docker exec -it --user $(username) $(containername) /bin/bash

18

非特権ユーザーとしてコンテナーで実行していたため、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

1
boot2dockerを使用して、私が使用していたsudo nsenter --target <PID> --mount --uts --ipc --net --pid
peater

はい、良い点です。一般的に、Dockerコマンドを実行するにはroot権限が必要です。nsenterも同じだと思います。私は私の答えでこれを完全に明確にしませんでした。
Richard Corfield 2015年

4
この回答が書かれて以来、Dockerはコマンドexecを追加して、基本的にnsenterと同じことを行いますが、より簡単でクリーンです。検索でこの質問を見つけた人のための単なるデータポイントです。コマンドは「docker exec -it <コンテナー名> <コマンド>」です(コマンドは通常/ bin / bashですが、もちろん好きなことを実行できます)。
Kevin Keane

また、dockerはホスト(およびresolv.conf)を特別に扱います。手動で編集しないでください。dockerは、リンクされたコンテナーなどを反映するために、毎回/ etc / hostsを再作成します。
Kevin Keane


9

実行中のコンテナのシェルを取得し、ルートパスワードを変更します。

docker exec -it <MyContainer> bash

root@MyContainer:/# passwd
Enter new UNIX password:
Retype new UNIX password:

9

実行中のコンテナでrootパスワードを作成/変更するには

docker exec -itu root {containerName} passwd

5

「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に再構築する必要があります。


3

より良い解決策は--add-host NAME:IP、コンテナーの起動時にdocker runに引数を与えることです。これにより、/etc/hosts/ルートになる必要なしにファイルが更新されます。

それ以外の場合はUSER-u USERフラグをに設定することで設定を上書きできますdocker run。ただし、実行中のコンテナーの内容を実際に変更するべきではないので、これはお勧めしません。代わりに、Dockerfileに変更を加えて、新しいイメージをビルドします。


コンテナの実行中にhostsファイルにエントリを追加する必要があります。
ギヨーム2015

新しいパッケージもインストールする必要がありますが、ルートではないのでインストールできません。
ギヨーム2015

1
-uフラグを使用して ユーザーを変更できます。コンテナの中からはできないと思います。
Adrian Mouat、2015


2

コンテナーを起動すると、ルートになりますが、ルートのpwが何であるかはわかりません。知っているものに設定するには、単に「passwd root」を使用します。コンテナをスナップショット/コミットして、アクションを保存します。


1

デフォルトでは、Dockerコンテナはrootユーザーとして実行されます。

まだコンテナーを使用している場合は、exitコマンドを使用してroot、コンテナーを再度実行する代わりに、(デフォルトユーザー)ユーザーに。

例-

[dev@6c4c86bccf93 ~]$ ls
[dev@6c4c86bccf93 ~]$ other-commands..
[dev@6c4c86bccf93 ~]$ exit
[root@6c4c86bccf93 /]# ls

0

rootアクセスを取得するには、次のコマンドを試してください

$ sudo -i 

sudoアクセスが可能なコンテナー設定にアカウントがない限り、これは機能しません。これは異常な状況であり、非rootユーザーがコンテナーを実行しているポイントを壊します。
ヨシヤ

Dockerインストールのデフォルトのsuパスワードを知っている人はいますか?標高を上げてみましたが1セットあります。
Patrick Burwell

これは、DockerイメージをエクスポートしてWSL2にインポートした後、WSL2で機能しました。そこから、passwdを実行してrootのパスワードを設定します。非rootユーザーに戻り、sudo suまたはsuを試してください。これで動作します。
WSLUser

0

場合によっては、ユーザーの下でそのようなことを実行できるようにする必要があります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になります。

useradd こちらまたはこちらでパスワードハッシュを生成する方法をご覧ください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.