Saya menggunakan gambar Docker yang dibangun menggunakan perintah USER untuk menggunakan pengguna non-root yang disebut dev
. Di dalam sebuah wadah, saya "dev", tetapi saya ingin mengedit /etc/hosts
file.
Jadi saya harus menjadi root. Saya mencoba perintah su, tetapi saya diminta untuk memasukkan kata sandi root.
Apa kata sandi pengguna root default di dalam wadah Docker?
docker exec -u 0 -it mycontainer bash
. (lihatH6
jawaban)Jawaban:
Anda dapat masuk ke wadah Docker menggunakan pengguna root (ID = 0) alih-alih pengguna default yang disediakan saat Anda menggunakan
-u
opsi. Misalnyadari dokumentasi Docker
sumber
docker run -u 0 -it mycontainer bash
Akhirnya, saya memutuskan untuk membangun kembali gambar Docker saya, sehingga saya mengubah kata sandi root dengan sesuatu yang akan saya ketahui.
atau
sumber
Ada beberapa cara untuk melakukannya.
Untuk menjalankan Docker, mengesampingkan pengaturan USER
atau
Buat izin file yang diperlukan, dll., Selama pembuatan gambar di file Docker
Jika semua paket tersedia di gambar Linux Anda,
chpasswd
di dockerfile sebelum utilitas USER.sumber
Saya bisa membuatnya bekerja dengan perintah di bawah ini.
sumber
Saya benar-benar memiliki masalah ini karena tidak dapat melakukan su ke root karena saya menjalankan dalam wadah sebagai pengguna yang tidak memiliki hak.
Tetapi saya tidak ingin membangun kembali gambar baru seperti yang disarankan oleh jawaban sebelumnya.
Sebaliknya saya menemukan bahwa saya dapat mengakses wadah sebagai root menggunakan 'nsenter', lihat: https://github.com/jpetazzo/nsenter
Pertama-tama tentukan PID wadah Anda di host:
Kemudian gunakan nsenter untuk memasukkan wadah sebagai root
sumber
sudo nsenter --target <PID> --mount --uts --ipc --net --pid
sumber
Dapatkan shell dari wadah Anda yang sedang berjalan dan ubah kata sandi root:
sumber
Untuk membuat / mengubah kata sandi root dalam wadah yang berjalan
sumber
Kata sandi adalah 'ubuntu' untuk pengguna 'ubuntu' (setidaknya di docker untuk ubuntu: 14.04.03).
NB: 'ubuntu' dibuat setelah memulai wadah jadi, jika Anda hanya melakukan ini:
Anda akan mendapatkan prompt root secara langsung. Dari sana Anda dapat memaksakan perubahan kata sandi root, komit wadah dan secara opsional beri tag (dengan -f) ke ubuntu: terbaru seperti ini:
Anda harus membangun kembali dependensi akhirnya di ubuntu: terbaru.
sumber
Saya menyarankan solusi yang lebih baik adalah memberikan
--add-host NAME:IP
argumen untuk menjalankan buruh pelabuhan ketika memulai wadah. Itu akan memperbarui/etc/hosts/
file tanpa perlu menjadi root.Jika tidak, Anda dapat mengganti
USER
pengaturan dengan memberikan-u USER
benderadocker run
. Saya akan menyarankan menentang ini, karena Anda tidak harus benar-benar mengubah hal-hal dalam wadah berjalan. Sebagai gantinya, buat perubahan Anda di Dockerfile dan buat gambar baru.sumber
-u
bendera untuk mengubah pengguna. Saya tidak berpikir Anda bisa melakukannya dari dalam wadah.Anda dapat menggunakan perintah root USER di Dockerfile Anda.
sumber
Saat Anda memulai wadah, Anda akan menjadi root tetapi Anda tidak akan tahu apa itu root. Untuk mengaturnya menjadi sesuatu yang Anda tahu cukup gunakan "passwd root". Bidik / komit wadah untuk menyimpan tindakan Anda.
sumber
Secara default, buruh pelabuhan menjalankan wadah sebagai
root
pengguna.Jika Anda masih menggunakan wadah, Anda dapat menggunakan
exit
perintah untuk kembaliroot
pengguna (pengguna default) alih-alih menjalankan wadah lagi.Contoh -
sumber
coba perintah berikut untuk mendapatkan akses root
sumber
Dalam beberapa kasus, Anda harus dapat melakukan hal-hal seperti itu di bawah pengguna dengan
sudo
(misalnya aplikasi yang berjalan dalam wadah menyediakan shell untuk pengguna). Cukup tambahkan ini ke Anda Dockerfile:Sekarang di bawah pengguna gambar default
user
Anda akan dapatsudo
dengan kata sandi yang ditetapkan pada baris 3.Lihat cara membuat hash kata sandi untuk di
useradd
sini atau di sini .sumber