Biasanya, kontainer buruh pelabuhan dijalankan menggunakan root pengguna . Saya ingin menggunakan pengguna lain, yang tidak masalah menggunakan arahan USER buruh pelabuhan. Tetapi pengguna ini harus bisa menggunakan sudo di dalam wadah. Perintah ini tidak ada.
Berikut Dockerfile sederhana untuk tujuan ini:
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
Menjalankan wadah ini, saya bisa masuk dengan pengguna 'buruh pelabuhan'. Ketika saya mencoba menggunakan sudo, perintah tidak ditemukan. Jadi saya mencoba menginstal paket sudo di dalam Dockerfile saya menggunakan
RUN apt-get install sudo
Ini menghasilkan Tidak dapat menemukan paket sudo
docker
sudo
linux-containers
drubb
sumber
sumber
Jawaban:
Baru saja mendapatkannya. Seperti yang ditunjukkan regan, saya harus menambahkan pengguna ke grup sudoers. Tapi alasan utamanya adalah saya lupa memperbarui cache repositori, jadi apt-get tidak bisa menemukan paket sudo. Ini bekerja sekarang. Ini kode yang sudah lengkap:
sumber
adduser
perintah meludah keluar penggunaan bantuan untukuseradd
/etc/sudoers.d/
dan atur izin440
pada file itu. Maka pengguna akan memiliki akses sudo di bawah CentOS, 6 dan lebih tinggi. 5 Anda harus menambahkan#includedir /etc/sudoers.d
arahan di/etc/sudoers
Ketika sudo atau apt-get tidak tersedia dalam wadah, Anda juga dapat melompat ke menjalankan wadah sebagai pengguna root menggunakan perintah
sumber
Jawaban lain tidak berhasil untuk saya. Saya terus mencari dan menemukan posting blog yang membahas bagaimana tim menjalankan non-root di dalam wadah buruh pelabuhan.
Inilah versi TL; DR:
Saya menggunakan
FROM node:9.3
ini, tetapi saya menduga bahwa basis wadah serupa lainnya akan bekerja juga.sumber
ubuntu:bionic-20180724.1
. Saya menggunakan pendekatan ini tetapi, setelah di atas, itu tidak memungkinkan saya untuk menginstal paket lain. Saya ditambahkan satu baris ke atasDockerfile
untuk menginstal paket dengan:RUN apt-get install -y tree
. Namun, itu memberi saya pesan kesalahan ini:Step xxxx/xxxx : RUN apt-get install -y tree ---> Running in j5e6gsvwfafa Reading package lists... E: Could not open lock file /var/lib/apt/lists/lock - open (13: Permission denied) E: Unable to lock directory /var/lib/apt/lists/
RUN sudo apt-get install -y tree
. Setelah mengaturUSER
sesuatu selainroot
, Anda harus menggunakansudo
perintah apa pun yang memerlukanroot
hak istimewa.sudo
diizinkan di Dockerfile.Untuk siapa pun yang memiliki masalah ini dengan wadah yang sudah berjalan, dan mereka tidak selalu ingin membangun kembali, perintah berikut ini terhubung ke wadah yang berjalan dengan hak akses root:
Anda juga dapat terhubung menggunakan ID-nya, bukan dari namanya, dengan menemukannya dengan:
Untuk menyimpan perubahan Anda sehingga masih ada di sana saat Anda meluncurkan wadah berikutnya (atau klaster penyusun dok):
Untuk memulai wadah yang tidak berjalan dan terhubung sebagai root:
Untuk menyalin dari wadah yang sedang berjalan:
Untuk mengekspor salinan gambar:
Yang dapat Anda pulihkan ke pemasangan Docker lain menggunakan:
Ini jauh lebih cepat tetapi membutuhkan lebih banyak ruang untuk tidak memampatkan, menggunakan:
Dan:
sumber
jika Anda ingin terhubung ke wadah dan menginstal sesuatu
menggunakan apt-get
pertama seperti jawaban di atas dari saudara kami "Tomáš Záluský"
lalu coba
itu berhasil dengan saya harap ini berguna untuk semua
sumber
Jika SUDO atau apt-get tidak dapat diakses di dalam Container, Anda dapat menggunakan, opsi di bawah ini dalam menjalankan container.
" f83b5c5bf413" adalah ID kontainer saya & inilah contoh yang berfungsi dari terminal saya:
sumber
Inilah cara saya mengatur pengguna non-root dengan gambar dasar
ubuntu:18.04
:Apa yang terjadi dengan kode di atas:
foo
dibuat.foo
ditambahkan ke grupfoo
dansudo
.uid
dangid
diatur ke nilai999
./home/foo
./bin/bash
.sed
perintah melakukan update inline dengan/etc/sudoers
berkas untuk memungkinkanfoo
danroot
akses pengguna memasukkan password kesudo
kelompok.sed
perintah menonaktifkan#includedir
direktif yang akan memungkinkan file dalam subdirektori untuk menimpa update inline ini.sumber
Jika Anda memiliki wadah yang dijalankan sebagai root yang menjalankan skrip (yang tidak dapat Anda ubah) yang membutuhkan akses ke
sudo
perintah, Anda bisa membuatsudo
skrip baru di Anda$PATH
yang memanggil perintah yang diteruskan.mis. Di Dockerfile Anda:
sumber
-e
dariecho
. Kalau tidak, file itu akan ada dalam file itu sendiri, menjadikannya tidak berfungsi.sudo -E ls
. Itu akan mencoba untuk mengeksekusi-E ls
.Ini mungkin tidak berfungsi untuk semua gambar, tetapi beberapa gambar sudah berisi pengguna root, seperti pada gambar jupyterhub / pengguna tunggal. Dengan gambar itu hanya:
sumber
Gunakan Alias.
Sederhana namun efisien. Jangan lupa menambahkannya ke ~ / .bash_aliases sehingga akan berfungsi setelah Anda membuka shell baru.
Karena pengguna adalah root default di Docker, 'mengabaikan' perintah sudo adalah cara termudah.
sumber
Tidak seperti jawaban yang diterima , saya menggunakan
usermod
sebagai gantinya.Asumsikan sudah masuk sebagai root di buruh pelabuhan, dan "buah" adalah nama pengguna baru non-root yang ingin saya tambahkan, cukup jalankan perintah ini:
Ingatlah untuk menyimpan gambar setelah pembaruan. Gunakan
docker ps
untuk mendapatkan <docker CONTAINER ID> dan <IMAGE> saat ini, kemudian jalankandocker commit -m "added sudo user" <CONTAINER ID> <IMAGE>
untuk menyimpan gambar buruh pelabuhan.Kemudian uji dengan:
Atau uji dengan login langsung (pastikan simpan gambar dulu) sebagai pengguna non-root saat meluncurkan buruh pelabuhan:
Anda dapat menggunakannya
sudo -k
untuk menyetel ulang stempel waktu kata sandi:sumber