Docker kapsayıcısının içindeki kök parola


265

Kök olmayan bir kullanıcı kullanmak için USER komutu kullanılarak oluşturulan bir Docker görüntü kullanıyorum dev. Bir kabın içinde "geliştirici" oldum, ancak /etc/hostsdosyayı düzenlemek istiyorum .

Bu yüzden kök olmalıyım. Su komutunu deniyorum, ancak root şifresini girmem isteniyor.

Docker kapsayıcısındaki varsayılan kök kullanıcı şifresi nedir?


11
sadece root olarak çalıştır docker exec -u 0 -it mycontainer bash. ( H6cevabın cevabına bakınız )
Sławomir Lenart

Yanıtlar:


495

-uSeçeneği kullandığınızda, sağlanan varsayılan kullanıcı yerine kök kullanıcıyı (ID = 0) kullanarak Docker kapsayıcısında oturum açabilirsiniz . Örneğin

docker exec -u 0 -it mycontainer bash

root (id = 0), bir kapsayıcı içindeki varsayılan kullanıcıdır. Resim geliştirici ek kullanıcılar oluşturabilir. Bu kullanıcılara adlarıyla erişilebilir. Sayısal bir kimlik iletilirken, kullanıcının kapsayıcıda bulunması gerekmez.

Docker belgelerinden


5
Yukarıdaki commad'ı yazdığınızda şu anda mycontainer'ı çalıştırıp çalıştırmanız gerektiğini belirtmek güzel olurdu. 2 farklı terminal kullanarak çalışır: biri mycontainer için diğeri bu komut için. Aksi takdirde mycontainer'ın bağımsız olarak çalışmasını gerektirir.
nicolimo86

6
görüntüler için kullanındocker run -u 0 -it mycontainer bash
Pavel 'PK' Kaminsky

2
üstte olması gereken cevap bu
D Pinto

1
@ High6, "Docker Görüntüsüne giriş yapabilirsiniz ..." derseniz, "Docker Kapsayıcısına giriş yapabilirsiniz" demek istediğinizi düşünüyorum .
lmiguelvargasf

Bu her zaman mümkün mü? Yoksa bu engellenebilir mi?
Sam Thomas

82

Sonunda, Docker görüntülerimi yeniden oluşturmaya karar verdim, böylece kök şifreyi bileceğim bir şeyle değiştireyim.

RUN echo 'root:Docker!' | chpasswd

veya

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

5
Bunu denedim ama CentOS 6 tabanlı bağlantı istasyonumda çalışmıyor. Bu komut CentOS tabanlı bağlantı istasyonunda çalışıyor mu?
Dragan Nikolic

28

Bunu yapmanın birkaç yolu var.

  1. Docker'ı USER ayarını geçersiz kılmak için çalıştırmak için

    docker exec -u 0 -it containerName bash
    

veya

docker exec -u root -it --workdir / <containerName> bash
  1. Docker dosyasındaki görüntü oluşturma sırasında gerekli dosya izinlerini vb. Yapın.

  2. Tüm paketler Linux görüntünüzde chpasswdmevcutsa, USER yardımcı programından önceki dockerfile dosyasında.



23

Aşağıdaki komutla çalıştırabiliyorum.

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

18

Tam olarak kapata ayrıcalıklı bir kullanıcı olarak çalışıyordu çünkü kök için su olmak mümkün değil bu sorun vardı.

Ama önceki cevapların önerdiği gibi yeni bir imaj oluşturmak istemedim.

Bunun yerine, konteynere 'nsenter' kullanarak kök olarak erişebileceğimi gördüm, bkz: https://github.com/jpetazzo/nsenter

İlk önce ana makinenizdeki kapsayıcınızın PID'sini belirleyin:

docker inspect --format {{.State.Pid}} <container_name_or_ID>

Sonra nsenter komutunu kullanarak kapsayıcıyı root olarak girin

nsenter --target <PID> --mount --uts --ipc --net --pid

1
Boot2docker kullanarak, kullanmak zorundayımsudo nsenter --target <PID> --mount --uts --ipc --net --pid
peater

Evet, iyi bir noktaya değindiniz. Docker komutlarını yürütmek için genellikle root izinlerine ihtiyacınız vardır ve sanırım nsenter aynıdır. Cevabımda bunu tam olarak açıklığa kavuşturmadım.
Richard Corfield

4
Bu yanıt yazıldığından beri docker, nsenter ile aynı şeyi yapmak için exec komutunu ekledi, ancak daha kolay ve daha temiz. Sadece bu soruyu arama yoluyla bulanlar için bir veri noktası. Komut "docker exec -it <containername> <komut>" dur (komut genellikle / bin / bash'dir, ancak elbette istediğinizi yapabilirsiniz).
Kevin Keane

Ayrıca, docker, ana bilgisayarlara (ve resolv.conf) özel bir işleme sahiptir. Bunları manuel olarak düzenlememelisiniz; docker, bağlantılı konteynerleri ve benzerlerini yansıtmak için her başlangıçta / etc / hosts oluşturur.
Kevin Keane


9

Çalışan kabınızın bir kabuğunu alın ve kök şifresini değiştirin:

docker exec -it <MyContainer> bash

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

9

Çalışan bir kapsayıcıda kök parola oluşturmak / değiştirmek için

docker exec -itu root {containerName} passwd

5

Parola 'ubuntu' kullanıcısı için 'ubuntu' dur (en azından ubuntu için docker'da: 14.04.03).

Not: 'ubuntu', kapsayıcı başlatıldıktan sonra oluşturulur, böylece bunu yaparsanız:

 docker run -i -t --entrypoint /bin/bash  ubuntu     

Kök istemini doğrudan alacaksınız. Oradan kök parola değişikliğini zorlayabilir, kapsayıcıyı işleyebilir ve isteğe bağlı olarak (-f ile) ubuntu'ya etiketleyebilirsiniz: en son şöyle:

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

Nihai bağımlılıklarınızı ubuntu: latest'a yeniden kurmalısınız.


3

--add-host NAME:IPKapsayıcıyı başlatırken docker'a argüman vermek daha iyi bir çözüm öneririm . Bu, /etc/hosts/kök haline gerek kalmadan dosyayı güncelleyecektir .

Aksi takdirde, bayrağa USERvererek ayarı geçersiz kılabilirsiniz . Bununla birlikte, çalışan bir kaptaki şeyleri gerçekten değiştirmemeniz gerektiği için buna karşı tavsiye ederim. Bunun yerine, bir Dockerfile dosyasında değişikliklerinizi yapın ve yeni bir resim oluşturun.-u USERdocker run


Kapsayıcı çalışırken hosts dosyasında girdiler eklemeniz gerekir.
guillaume

Ayrıca yeni bir paket yüklemem gerekiyor, ancak root olmadığım için yapamıyorum.
guillaume

1
-uKullanıcıyı değiştirmek için bayrağı kullanabilirsiniz . Bunu kabın içinden yapabileceğini sanmıyorum.
Adrian Mouat


2

Kapsayıcıyı başlattığınızda, root olacaksınız ancak root'un pw'sinin ne olduğunu bilemezsiniz. Bildiğiniz bir şeye ayarlamak için "passwd root" kullanın. Anlık görüntü / kapsayıcı eylemlerinizi kaydetmek için.


1

Varsayılan olarak docker kapsayıcıları rootkullanıcı olarak çalışır .

Kapsayıcıyı hala kullanıyorsanız , kapsayıcıyı yeniden çalıştırmak yerine (varsayılan kullanıcı) kullanıcıya exitgeri dönmek için komutu kullanabilirsiniz root.

Misal -

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

0

root erişimi için aşağıdaki komutu deneyin

$ sudo -i 

Sudo erişimi olan kapsayıcı kurulumunda hesabınız yoksa, bu işe yaramaz. Bu alışılmadık bir durumdur ve kök olmayan bir kullanıcının kapsayıcıyı çalıştırması noktasını kırar.
Josiah

Docker kurulumu için DEFAULT su şifresini bilen var mı? Yüksekliği çalıştırmaya çalıştım ve bir set var.
Patrick Burwell

Bu, docker görüntüsünü dışa aktardıktan ve WSL2'ye içe aktardıktan sonra WSL2'de çalıştı. Oradan, root için parola ayarlamak için passwd yapın. "Root" dışı kullanıcıya geri dönün ve sudo su veya su komutunu deneyin. Şimdi işe yarayacak.
WSLUser

0

Bazı durumlarda, bir kullanıcı altında böyle şeyler yapabilmeniz gerekir sudo(örneğin, kapta çalışan uygulama kullanıcılara bir kabuk sağlar). Bunu Dockerfile dosyasına eklemeniz yeterlidir:

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

Artık varsayılan görüntü kullanıcısı altında 3. satırda ayarlanmış olan şifreyi userkullanabilirsiniz sudo.

useradd Burada veya burada nasıl şifre karması oluşturacağınıza bakın .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.