Atau hubungi melalui Linkedin jika bersifat pribadi: https://www.linkedin.com/in/sickcodes
Atau melalui https://sick.codes/contact/
Proyek ini dikelola oleh Sick.Codes. (Twitter)
Kredit tambahan dapat ditemukan di sini: https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
Selain itu, daftar lengkap semua kontributor dapat ditemukan di sini: https://github.com/sickcodes/Docker-OSX/graphs/contributors
Terima kasih banyak kepada @kholia karena telah memelihara proyek upstream, tempat Docker-OSX dibangun di atas: OSX-KVM.
Terima kasih khusus juga kepada @thenickdude yang mengelola fork berharga KVM-OpenCore, yang dimulai oleh @Leoyzen!
Terima kasih istimewa kepada tim OpenCore di: https://github.com/acidanthera/OpenCorePkg. Bootloader mereka yang terpelihara dengan baik menyediakan banyak fungsi hebat yang dinikmati pengguna Docker-OSX :)
Jika Anda menyukai proyek ini, pertimbangkan untuk berkontribusi di sini atau di bagian hulu!
Tutorial pengaturan video juga tersedia di sini: https://www.youtube.com/watch?v=wLezYl77Ll8
Pengguna Windows: klik di sini untuk melihat catatan di bawah!
Pertama kali ke sini? coba pengaturan awal, jika tidak, coba petunjuk di bawah ini untuk menggunakan Catalina atau Big Sur.
Nama rilis dan versinya:
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=catalina
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=big-sur
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist '
-e SHORTNAME=monterey
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist '
-e SHORTNAME=ventura
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e CPU= ' Haswell-noTSX '
-e CPUID_FLAGS= ' kvm=on,vendor=GenuineIntel,+invtsc,vmware-cpuid-freq=on '
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom-sonoma.plist '
-e SHORTNAME=sonoma
sickcodes/docker-osx:latest
# docker build -t docker-osx .
# 40GB disk space required: 20GB original image 20GB your container.
docker pull sickcodes/docker-osx:auto
# boot directly into a real OS X shell with a visual display [NOT HEADLESS]
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
sickcodes/docker-osx:auto
# username is user
# password is alpine
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=high-sierra
sickcodes/docker-osx:latest
# docker build -t docker-osx .
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e SHORTNAME=mojave
sickcodes/docker-osx:latest
# docker build -t docker-osx .
Ini adalah cara yang sangat baik untuk mengunduh container, jika CDN Docker (atau koneksi Anda) lambat.
wget https://images2.sick.codes/mac_hdd_ng_auto.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng_auto.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
-e SHORTNAME=catalina
sickcodes/docker-osx:naked
Aktifkan SSH dalam berbagi jaringan di dalam tamu terlebih dahulu. Ubah -e "USERNAME=user"
dan -e "PASSWORD=password"
menjadi kredensial Anda. Wadah akan menambahkan dirinya ke ~/.ssh/authorized_keys
Karena Anda tidak dapat melihat layar, gunakan PLIST dengan nopicker, misalnya:
# Catalina
# wget https://images2.sick.codes/mac_hdd_ng_auto.img
# Monterey
wget https://images.sick.codes/mac_hdd_ng_auto_monterey.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng_auto_monterey.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e " USERNAME=user "
-e " PASSWORD=alpine "
-e GENERATE_UNIQUE=true
-e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
-e SHORTNAME=monterey
sickcodes/docker-osx:naked-auto
Cara termudah dan teraman adalah sshfs
# on Linux/Windows
mkdir ~ /mnt/osx
sshfs user@localhost:/ -p 50922 ~ /mnt/osx
# wait a few seconds, and ~/mnt/osx will have full rootfs mounted over ssh, and in userspace
# automated: sshpass -p <password> sshfs user@localhost:/ -p 50922 ~/mnt/osx
Jika Anda memiliki laptop lihat bagian usbfluxd berikutnya.
Jika Anda memiliki PC desktop, Anda dapat menggunakan petunjuk @Silfalion: https://github.com/Silfalion/Iphone_docker_osx_passthrough
Tutorial pengaturan video untuk usbfluxd juga tersedia di sini: https://www.youtube.com/watch?v=kTk5fGjK_PM
Metode ini BEKERJA di laptop, PC, apa saja!
Terima kasih @nikias untuk usbfluxd melalui https://github.com/corellium!
Ini dilakukan di dalam Linux.
Buka 3 terminal di Linux
Menghubungkan perangkat Anda melalui USB di Linux memungkinkan Anda mengekspos usbmuxd
pada port 5000
menggunakan https://github.com/corellium/usbfluxd ke sistem lain di jaringan yang sama.
Pastikan usbmuxd
, socat
dan usbfluxd
diinstal.
sudo pacman -S libusbmuxd usbmuxd avahi socat
Tersedia di AUR: https://aur.archlinux.org/packages/usbfluxd/
yay usbfluxd
Hubungkan iPhone atau iPad Anda.
Terminal 1
sudo systemctl start usbmuxd
sudo avahi-daemon
Terminal 2:
# on host
sudo systemctl restart usbmuxd
sudo socat tcp-listen:5000,fork unix-connect:/var/run/usbmuxd
Terminal 3:
sudo usbfluxd -f -n
Ini dilakukan di dalam macOS.
Instal minuman rumahan.
172.17.0.1
biasanya merupakan IP jembatan Docker, yang merupakan PC Anda, tetapi Anda dapat menggunakan IP apa pun dari ip addr
...
Terminal macOS:
# on the guest
brew install make automake autoconf libtool pkg-config gcc libimobiledevice usbmuxd
git clone https://github.com/corellium/usbfluxd.git
cd usbfluxd
./autogen.sh
make
sudo make install
Terima koneksi USB melalui TCP, dan tampil sebagai lokal:
(Anda mungkin perlu mengubah 172.17.0.1
ke alamat IP host. misalnya periksa ip addr
)
# on the guest
sudo launchctl start usbmuxd
export PATH=/usr/local/sbin: ${PATH}
sudo usbfluxd -f -r 172.17.0.1:5000
Tutup aplikasi seperti Xcode dan buka kembali dan perangkat Anda akan muncul!
Jika Anda perlu memulai lagi di Linux, hapus usbfluxd, usbmuxd, dan socat saat ini:
sudo killall usbfluxd
sudo systemctl restart usbmuxd
sudo killall socat
LIHAT perintah di https://github.com/sickcodes/osx-optimizer!
Pindahkan /var/lib/docker, ikuti tutorial di bawah ini
Tutorialnya di sini: https://sick.codes/how-to-run-docker-from-block-storage/
Ikuti tutorial di atas hanya jika Anda senang menghapus semua gambar/lapisan Docker Anda saat ini.
Mode aman: Nonaktifkan buruh pelabuhan untuk sementara sehingga Anda dapat memindahkan folder Docker untuk sementara.
killall dockerd
systemctl disable --now docker
systemctl disable --now docker.socket
systemctl stop docker
systemctl stop docker.socket
Sekarang, daemon Docker tidak aktif, pindahkan /var/lib/docker ke suatu tempat
Kemudian, tautkan secara simbolis /var/lib/docker di suatu tempat:
mv /var/lib/docker /run/media/user/some_drive/docker
ln -s /run/media/user/some_drive/docker /var/lib/docker
# now check if /var/lib/docker is working still
ls /var/lib/docker
Jika Anda melihat folder, maka itu berhasil. Anda dapat me-restart Docker, atau reboot saja jika Anda ingin yakin.
14-11-2021 - Menambahkan Sierra Tinggi, Mojave
Pilih salah satu dari ini saat membangun , tidak relevan saat menggunakan docker pull:
--build-arg SHORTNAME=high-sierra
--build-arg SHORTNAME=mojave
--build-arg SHORTNAME=catalina
--build-arg SHORTNAME=big-sur
--build-arg SHORTNAME=monterey
--build-arg SHORTNAME=ventura
--build-arg SHORTNAME=sonoma
Saat ini terdapat beberapa gambar, masing-masing dengan kasus penggunaan berbeda (dijelaskan di bawah):
Sierra Tinggi:
Mojave:
Katalina:
Sur Besar:
Monterey membuat gambar Anda sendiri:
Ventura membuat gambar Anda sendiri:
Sonoma membuat gambar Anda sendiri:
Sistem Catalina yang dibuat sebelumnya oleh Sick.Codes: nama pengguna: user
, kata sandi: alpine
Telanjang: Bawalah pengaturan gambar Anda sendiri (gunakan salah satu cara di atas terlebih dahulu):
Naked Auto: sama seperti di atas tetapi dengan -e USERNAME
& -e PASSWORD
dan -e OSX_COMMANDS="put your commands here"
localhost:50922
)localhost:8888
) jika menggunakan versi ./vncdocker commit
:auto
(setengah untuk gambar dasar, setengah untuk gambar runtime AndaGambar yang dibuat di atas konten repositori ini juga tersedia di Docker Hub untuk kenyamanan: https://hub.docker.com/r/sickcodes/docker-osx
Daftar lengkap image Docker yang tersedia dan tujuan yang dimaksudkan dapat ditemukan di Petunjuk.
Docker-OSX mendukung Kubernetes.
Bagan & Dokumentasi Helm Kubernetes dapat ditemukan di direktori helm.
Terima kasih cephasara telah menyumbangkan kontribusi besar ini.
Jangan ragu untuk membuka masalah, jika Anda menemukan masalah kecil saat menjalankan Docker-OSX atau memiliki pertanyaan.
Namun, sebelum Anda membuka terbitan, harap periksa terbitan yang telah ditutup dan konfirmasikan bahwa Anda menggunakan versi terbaru repositori ini — masalah Anda mungkin telah teratasi! Anda mungkin juga melihat jawaban Anda di bagian pertanyaan dan jawaban kami di bawah.
Ikuti @sickcodes!
Untuk upaya yang lebih canggih, kami menawarkan layanan dukungan berikut:
Jika Anda tertarik, hubungi @sickcodes di Twitter atau klik di sini.
Docker-OSX dilisensikan di bawah GPL v3+. Kontribusi disambut dan sangat dihargai. Anda sebenarnya diizinkan menggunakan Docker-OSX sebagai alat untuk membuat perangkat lunak berpemilik.
Jika Anda serius dengan Keamanan Apple, dan mungkin menemukan bug bounty sebesar 6 digit dalam Program Bug Bounty Apple, maka Anda berada di tempat yang tepat! Catatan lebih lanjut: Apakah Hackintosh, OSX-KVM, atau Docker-OSX legal?
Nama produk, logo, merek, dan merek dagang lain yang dirujuk dalam proyek ini adalah milik dari pemegang merek dagang masing-masing. Pemegang merek dagang ini tidak berafiliasi dengan repositori kami dalam kapasitas apa pun. Mereka tidak mensponsori atau mendukung proyek ini dengan cara apapun.
Ada beberapa image Docker-OSX berbeda yang tersedia dan cocok untuk tujuan berbeda.
sickcodes/docker-osx:latest
- Saya hanya ingin mencobanya.sickcodes/docker-osx:latest
- Saya ingin menggunakan Docker-OSX untuk mengembangkan/mengamankan aplikasi di Xcode (masuk ke Xcode, Transporter)sickcodes/docker-osx:naked
- Saya ingin menggunakan Docker-OSX untuk tujuan terkait CI/CD (masuk ke Xcode, Transporter) Buat gambar pribadi Anda menggunakan :latest
atau big-sur
. Kemudian, tarik gambar keluar dari gambar. Setelah itu, Anda akan dapat menduplikasi gambar tersebut dan mengimpornya ke container :naked
, untuk mengembalikan container ke keadaan sebelumnya berulang kali.
sickcodes/docker-osx:auto
- Saya hanya tertarik menggunakan baris perintah (berguna untuk mengkompilasi perangkat lunak atau menggunakan Homebrew tanpa kepala).
sickcodes/docker-osx:naked
- Saya memerlukan iMessage/iCloud untuk riset keamanan.
sickcodes/docker-osx:big-sur
- Saya ingin menjalankan Big Sur.
sickcodes/docker-osx:monterey
- Saya ingin menjalankan Monterey.
sickcodes/docker-osx:ventura
- Saya ingin menjalankan Ventura.
sickcodes/docker-osx:sonoma
- Saya ingin menjalankan Sonoma.
sickcodes/docker-osx:high-sierra
- Saya ingin menjalankan High Sierra.
sickcodes/docker-osx:mojave
- Saya ingin menjalankan Mojave.
Sebelum Anda melakukan hal lain, Anda perlu mengaktifkan virtualisasi perangkat keras di BIOS Anda. Cara tepatnya akan bergantung pada mesin khusus Anda (dan BIOS), tetapi ini harusnya mudah.
Kemudian, Anda memerlukan QEMU dan beberapa dependensi lain pada host Anda:
# ARCH
sudo pacman -S qemu libvirt dnsmasq virt-manager bridge-utils flex bison iptables-nft edk2-ovmf
# UBUNTU DEBIAN
sudo apt install qemu qemu-kvm libvirt-clients libvirt-daemon-system bridge-utils virt-manager libguestfs-tools
# CENTOS RHEL FEDORA
sudo yum install libvirt qemu-kvm
Kemudian, aktifkan libvirt dan muat modul kernel KVM:
sudo systemctl enable --now libvirtd
sudo systemctl enable --now virtlogd
echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
sudo modprobe kvm
Menjalankan Docker-OSX di Windows dapat dilakukan menggunakan WSL2 (Subsistem Windows 11 + Windows untuk Linux).
Anda harus menginstal Windows 11 dengan build 22000+ (21H2 atau lebih tinggi).
Pertama, instal WSL di komputer Anda dengan menjalankan perintah ini di powershell administrator. Untuk informasi lebih lanjut, lihat di sini.
Ini akan menginstal Ubuntu secara default.
wsl --install
Anda dapat mengonfirmasi WSL2 diaktifkan menggunakan wsl -l -v
di PowerShell. Untuk melihat distribusi lain yang tersedia, gunakan wsl -l -o
.
Jika sebelumnya Anda telah menginstal WSL1, tingkatkan ke WSL 2. Periksa tautan ini untuk meningkatkan dari WSL1 ke WSL2.
Setelah instalasi WSL, buka C:/Users/<Your_Name>/.wslconfig
dan tambahkan nestedVirtualization=true
di akhir file (Jika file tidak ada, buatlah). Untuk informasi lebih lanjut tentang file .wslconfig
, periksa tautan ini. Verifikasi bahwa Anda telah memilih "Tampilkan File Tersembunyi" dan "Tampilkan Ekstensi File" di opsi File Explorer. Hasilnya akan seperti ini:
[wsl2]
nestedVirtualization=true
Masuk ke distro WSL Anda (Jalankan wsl
di PowerShell) dan periksa apakah KVM diaktifkan dengan menggunakan perintah kvm-ok
. Outputnya akan terlihat seperti ini:
INFO: /dev/kvm exists
KVM acceleration can be used
Gunakan perintah sudo apt -y install bridge-utils cpu-checker libvirt-clients libvirt-daemon qemu qemu-kvm
untuk menginstalnya jika belum.
Sekarang unduh dan instal Docker untuk Windows jika belum diinstal.
Setelah instalasi, masuk ke Pengaturan dan centang 2 kotak ini:
General -> "Use the WSL2 based engine";
Resources -> WSL Integration -> "Enable integration with my default WSL distro",
Pastikan x11-apps
diinstal. Gunakan perintah sudo apt install x11-apps -y
untuk menginstalnya jika belum.
Terakhir, ada 3 cara untuk mendapatkan keluaran video:
Untuk menggunakan server X-11 bawaan WSLg, ubah dua baris ini di perintah docker run untuk mengarahkan Docker-OSX ke WSLg.
-e "DISPLAY=${DISPLAY:-:0.0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
Atau coba:
-e "DISPLAY=${DISPLAY:-:0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
Untuk Ubuntu 20.x di Windows, lihat #458
Boot Sistem Dasar macOS (Tekan Enter)
Klik Disk Utility
Hapus disk TERBESAR (default sekitar 200 GB), JANGAN MODIFIKASI DISK YANG LEBIH KECIL. -- jika Anda tidak dapat mengeklik erase
, Anda mungkin perlu mengurangi ukuran disk sebesar 1kb
(opsional) Buat partisi menggunakan ruang yang tidak terpakai untuk menampung OS dan file Anda jika Anda ingin membatasi kapasitas. (Untuk partisi Xcode 12 setidaknya 60 GB.)
Klik Reinstall macOS
Sistem mungkin memerlukan beberapa kali reboot selama instalasi
Ini adalah tempat yang bagus untuk memulai jika Anda mengalami kesulitan untuk memulai, terutama jika Anda belum begitu familiar dengan Docker.
Hanya ingin membuat wadah dengan cepat? Lihat bagian contoh pembuatan container kami.
Pertanyaan dan jawaban pemecahan masalah yang lebih spesifik/lanjutan dapat ditemukan di Pertanyaan dan Jawaban Lainnya. Anda juga harus memeriksa masalah yang sudah ditutup. Orang lain mungkin sudah mendapatkan jawaban atas pertanyaan seperti pertanyaan Anda meskipun Anda tidak dapat menemukannya di dokumen ini!
Lihat pengaturan awal.
docker: unknown server OS: .
See 'docker run --help'.
Ini berarti daemon buruh pelabuhan Anda tidak berjalan.
pgrep dockerd
seharusnya tidak mengembalikan apa pun
Oleh karena itu, Anda punya beberapa pilihan.
sudo dockerd
untuk penggunaan Docker latar depan. Saya menggunakan ini.
Atau
sudo systemctl --start dockerd
untuk memulai dockerd ini sekarang.
Atau
sudo systemctl --enable --now dockerd
untuk memulai dockerd pada setiap reboot, dan sekarang.
Contoh:
-e EXTRA='-smp 6,sockets=3,cores=2'
-e EXTRA='-smp 8,sockets=4,cores=2'
-e EXTRA='-smp 16,sockets=8,cores=2'
Catatan, tidak seperti memori, penggunaan CPU dibagi. sehingga Anda dapat mengalokasikan semua CPU Anda ke wadah.
Jika Anda menggunakan sudo dockerd
atau dockerd dikendalikan oleh systemd/systemctl, maka Anda harus berada di grup Docker. Jika Anda tidak berada dalam grup Docker:
sudo usermod -aG docker " ${USER} "
dan tambahkan juga diri Anda ke grup kvm dan libvirt jika diperlukan:
sudo usermod -aG libvirt " ${USER} "
sudo usermod -aG kvm " ${USER} "
Lihat juga: pengaturan awal.
# run ad hoc
sudo dockerd
# or daemonize it
sudo nohup dockerd &
# enable it in systemd (it will persist across reboots this way)
sudo systemctl enable --now docker
# or just start it as your user with systemd instead of enabling it
systemctl start docker
Terima kasih yang sebesar-besarnya kepada kontributor kami yang telah menyelesaikan hampir semua masalah yang mungkin terjadi sejauh ini!
https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
Membuat wadah dengan docker run
dan ingin menggunakan kembali gambar yang mendasarinya lagi nanti?
NB: lihat contoh pembuatan container terlebih dahulu untuk mengetahui cara menerapkannya.
Ini untuk saat Anda ingin menjalankan container yang SAMA lagi nanti. Anda mungkin perlu menggunakan docker commit
untuk menyimpan container Anda sebelum Anda dapat menggunakannya kembali. Periksa apakah container Anda masih menggunakan docker ps --all
.
Jika Anda tidak menjalankan ini, Anda akan memiliki gambar baru setiap saat.
# look at your recent containers and copy the CONTAINER ID
docker ps --all
# docker start the container ID
docker start -ai abc123xyz567
# if you have many containers, you can try automate it with filters like this
# docker ps --all --filter "ancestor=sickcodes/docker-osx"
# for locally tagged/built containers
# docker ps --all --filter "ancestor=docker-osx"
Anda juga dapat menarik file .img
dari wadah, yang disimpan di /var/lib/docker
, dan menyediakannya sebagai argumen runtime ke gambar :naked
Docker.
Lihat juga: di sini.
Kontainer yang menggunakan sickcodes/docker-osx:auto
dapat dihentikan ketika sedang dimulai.
# find last container
docker ps -a
# docker start old container with -i for interactive, -a for attach STDIN/STDOUT
docker start -ai -i < Replace this with your ID >
Anda mungkin melihat satu atau lebih kesalahan terkait libgtk jika Anda belum menyiapkan semuanya untuk virtualisasi perangkat keras. Jika Anda belum melakukannya, periksa bagian pengaturan awal dan bagian pemeriksaan rutin karena Anda mungkin melewatkan satu langkah pengaturan atau mungkin belum menyiapkan semua dependensi Docker yang diperlukan.
Lihat juga: di sini.
Jika Anda belum menyiapkan xhost, coba yang berikut ini:
echo $DISPLAY
# ARCH
sudo pacman -S xorg-xhost
# UBUNTU DEBIAN
sudo apt install x11-xserver-utils
# CENTOS RHEL FEDORA
sudo yum install xorg-x11-server-utils
# then run
xhost +
Anda tidak dapat mengalokasikan lebih banyak RAM daripada yang dimiliki mesin Anda. Standarnya adalah 3 Gigabyte: -e RAM=3
.
Jika Anda mencoba mengalokasikan lebih banyak RAM ke wadah daripada yang tersedia saat ini, Anda mungkin melihat kesalahan seperti berikut: cannot set up guest memory 'pc.ram': Cannot allocate memory
. Lihat juga: di sini, di sini.
Misalnya (di bawah) buff/cache
sudah berisi alokasi RAM sebesar 20 Gigabyte:
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.5Gi 7.0Gi 728Mi 20Gi 26Gi
Swap: 11Gi 0B 11Gi
Hapus buffer dan cache:
sudo tee /proc/sys/vm/drop_caches <<< 3
Sekarang periksa kembali RAM:
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.3Gi 26Gi 697Mi 1.5Gi 26Gi
Swap: 11Gi 0B 11Gi
Catatan: AppleALC, alcid
dan VoodooHDA-OC tidak memiliki dukungan codec. Namun, IORegistryExplorer menunjukkan komponen pengontrol berfungsi.
docker run
--device /dev/kvm
-e AUDIO_DRIVER=pa,server=unix:/tmp/pulseaudio.socket
-v " /run/user/ $( id -u ) /pulse/native:/tmp/pulseaudio.socket "
-v /tmp/.X11-unix:/tmp/.X11-unix
sickcodes/docker-osx
docker run
--device /dev/kvm
-e AUDIO_DRIVER=pa,server=unix:/tmp/pulseaudio.socket
-v " /run/user/ $( id -u ) /pulse/native:/tmp/pulseaudio.socket "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e PULSE_SERVER=unix:/tmp/pulseaudio.socket
sickcodes/docker-osx pactl list
docker run
--device /dev/kvm
-e AUDIO_DRIVER=pa,server=unix:/tmp/pulseaudio.socket
-v /mnt/wslg/runtime-dir/pulse/native:/tmp/pulseaudio.socket
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
sickcodes/docker-osx
Port tambahan dapat diteruskan tergantung kebutuhan Anda. Dalam contoh ini, kita akan menggunakan Mac OSX untuk menghosting nginx:
host:10023 <-> 10023:container:10023 <-> 80:guest
Di mesin host, jalankan:
docker run -it
--device /dev/kvm
-p 50922:10022
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80, '
-p 10023:10023
sickcodes/docker-osx:auto
Dalam sesi Terminal yang menjalankan kontainer, jalankan:
/bin/bash -c " $( curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh ) "
brew install nginx
sudo sed -i -e ' s/8080/80/ ' /usr/local/etc/nginx/nginx.confcd
# sudo nginx -s stop
sudo nginx
nginx sekarang dapat dijangkau pada port 10023.
Selain itu, Anda dapat merangkai beberapa pernyataan secara bersamaan, misalnya:
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80,hostfwd=tcp::10043-:443, '
-p 10023:10023
-p 10043:10043
Anda mungkin tidak perlu melakukan apa pun dengan pengaturan default untuk mengaktifkan konektivitas internet dari dalam penampung. Selain itu, curl
mungkin berfungsi meskipun ping
tidak.
Lihat pembahasannya di sini dan di sini dan di sini.
Ini tidak diperlukan untuk instalasi LOKAL.
Perlu diperhatikan juga bahwa hal ini dapat menyebabkan host membocorkan IP Anda, meskipun Anda menggunakan VPN di dalam container.
Namun, jika Anda mencoba menyambung ke instance Docker-OSX dari jarak jauh (misalnya instance Docker-OSX yang dihosting di pusat data), hal ini dapat meningkatkan kinerja Anda:
# enable for current session
sudo sysctl -w net.ipv4.ip_forward=1
# OR
# sudo tee /proc/sys/net/ipv4/ip_forward <<< 1
# enable permanently
sudo touch /etc/sysctl.conf
sudo tee -a /etc/sysctl.conf << EOF
net.ipv4.ip_forward = 1
EOF
# or edit manually with the editor of your choice
nano /etc/sysctl.conf || vi /etc/sysctl.conf || vim /etc/sysctl.conf
# now reboot
Berbagi folder dengan tamu cukup sederhana.
Folder Anda, akan menuju ke /mnt/hostshare di dalam wadah Arch yang kemudian diteruskan ke QEMU.
Kemudian pasang menggunakan sudo -S mount_9p hostshare
dari dalam mac.
Misalnya,
FOLDER= ~ /somefolder
-v " ${FOLDER} :/mnt/hostshare "
-e EXTRA= " -virtfs local,path=/mnt/hostshare,mount_tag=hostshare,security_model=passthrough,id=hostshare "
Contoh lengkap:
# stat mac_hdd_ng.img
SHARE= ~ /somefolder
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v " ${PWD} /mac_hdd_ng.img:/home/arch/OSX-KVM/mac_hdd_ng.img "
-v " ${SHARE} :/mnt/hostshare "
-e EXTRA= " -virtfs local,path=/mnt/hostshare,mount_tag=hostshare,security_model=passthrough,id=hostshare "
sickcodes/docker-osx:latest
# !!! Open Terminal inside macOS and run the following command to mount the virtual file system
# sudo -S mount_9p hostshare
Untuk berbagi folder menggunakan NFS, siapkan folder di mesin host, misalnya /srv/nfs/share
lalu tambahkan ke /etc/exports
:
/srv/nfs/share 127.0.0.1/0(insecure,rw,all_squash,anonuid=1000,anongid=985,no_subtree_check)
Anda mungkin perlu memuat ulang ekspor sekarang, yang akan mulai membagikan direktori tersebut.
# reload shared folders
sudo exportfs -arv
Sumber & Penjelasan
Berikan izin pada folder bersama untuk anonuid
dan anongid
, di mana anonuid
dan anongid
cocok dengan pengguna linux Anda; id -u
id -u ; id -g
akan mencetak userid:groupid
chown 1000:985 /srv/nfs/share
chmod u+rwx /srv/nfs/share
Mulai kontainer Docker-OSX dengan flag tambahan --network host
Buat dan pasang folder nfs dari terminal mac:
mkdir -p ~/mnt
sudo mount_nfs -o locallocks 10.0.2.2:/srv/nfs/share ~/mnt
Mulai wadah Anda.
Pilih port, misalnya 7700
.
lsusb
untuk mendapatkan vid:pid
Di Linux: sudo usbredirserver -p 7700 1e3d:2096
Sekarang, di jendela Docker tekan Enter untuk melihat konsol (qemu)
.
Anda dapat menambah/menghapus disk menggunakan perintah seperti ini, bahkan setelah mesin dihidupkan:
chardev-add socket,id=usbredirchardev1,port=7700,host=172.17.0.1
device_add usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=4
PORT=7700
IP_ADDRESS=172.17.0.1
-e EXTRA= " -chardev socket,id=usbredirchardev1,port= ${PORT} ,host= ${IP_ADDRESS} -device usb-redir,chardev=usbredirchardev1,id=usbredirdev1,debug=4 " `
Pengaturan firewall default Fedora mungkin mencegah antarmuka jaringan Docker menjangkau internet. Untuk mengatasi hal ini, Anda perlu memasukkan antarmuka ke dalam daftar putih firewall Anda:
# Set the docker0 bridge to the trusted zone
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
Periksa apakah mesin Anda mengaktifkan virtualisasi perangkat keras:
sudo tee /sys/module/kvm/parameters/ignore_msrs <<< 1
egrep -c ' (svm|vmx) ' /proc/cpuinfo
-e NETWORKING=vmxnet3
-e NETWORKING=e1000-82545em
du -sh *
mulai dari direktori /
, dan temukan direktori besar tempat file dapat dihapus. Misalnya file cache yang tidak perlu, platform Xcode, dll.sudo trimforce enable
, dan reboot.dd if=/dev/zero of=./empty && rm -f empty
docker cp stoppedcontainer:/home/arch/OSX-KVM/mac_hdd_ng.img .
qemu-img check -r all mac_hdd_ng.img
untuk memperbaiki kesalahan apa pun.qemu-img convert -O qcow2 mac_hdd_ng.img deduped.img
dan periksa kesalahan lagiqemu-img convert -c -O qcow2 deduped.img compressed.img
untuk mengompresi gambar lebih lanjut. Hal ini mungkin mengurangi kecepatan runtime, namun akan mengurangi ukurannya sekitar 25%. FROM sickcodes/docker-osx
USER arch
COPY --chown=arch ./deduped.img /home/arch/OSX-KVM/mac_hdd_ng.img
Pertama pastikan autoboot diaktifkan
Selanjutnya, Anda ingin mengatur SSH agar dimulai secara otomatis.
sudo systemsetup -setremotelogin on
Pastikan untuk mengkomit image buruh pelabuhan baru dan menyimpannya, atau membangun kembali seperti yang dijelaskan di bagian tentang mengurangi ruang disk.
Kemudian jalankan dengan argumen ini.
# Run with the -nographic flag, and enable a telnet interface
docker run
--device /dev/kvm
-p 50922:10022
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -monitor telnet::45454,server,nowait -nographic -serial null "
mycustomimage
Jika Anda membuat Docker-OSX secara lokal, Anda mungkin ingin menggunakan mirror Arch Linux.
Lokasi cermin dapat ditemukan di sini (menggunakan kode negara dua huruf): https://archlinux.org/mirrorlist/all/
docker build -t docker-osx:latest
--build-arg RANKMIRRORS=true
--build-arg MIRROR_COUNTRY=US
--build-arg MIRROR_COUNT=10
--build-arg SHORTNAME=catalina
--build-arg SIZE=200G .
Teruskan perangkat/direktori apa pun ke wadah Docker & argumen QEMU menggunakan opsi penyedia argumen runtime yang praktis -e EXTRA=
.
# example customizations
docker run
-e RAM=4
-e SMP=4
-e CORES=4
-e EXTRA= ' -usb -device usb-host,hostbus=1,hostaddr=8 '
-e INTERNAL_SSH_PORT=23
-e MAC_ADDRESS= " $( xxd -c1 -p -l 6 /dev/urandom | tr ' n ' ' : ' | cut -c1-17 ) "
-e AUDIO_DRIVER=alsa
-e IMAGE_PATH=/image
-e SCREEN_SHARE_PORT=5900
-e DISPLAY=:0
-e NETWORKING=vmxnet3
--device /dev/kvm
--device /dev/snd
-v /tmp/.X11-unix:/tmp/.X11-unix
docker-osx:latest
Hasilkan nomor seri di ./custom
ATAU buat buruh pelabuhan menghasilkannya saat runtime (lihat di bawah).
Kapan saja, verifikasi nomor seri Anda sebelum masuk ke iCloud, dll.
# this is a quick way to check your serial number via cli inside OSX
ioreg -l | grep IOPlatformSerialNumber
# test some commands
sshpass -p ' alpine ' ssh user@localhost -p 50922 ' ping google.com '
# check your serial number
sshpass -p ' alpine ' ssh user@localhost -p 50922 ' ioreg -l | grep IOPlatformSerialNumber '
# ARCH
pacman -S libguestfs
# UBUNTU DEBIAN
apt install libguestfs -y
# RHEL FEDORA CENTOS
yum install libguestfs -y
Di dalam folder ./custom
Anda akan menemukan 4
skrip.
config-nopicker-custom.plist
opencore-image-ng.sh
Kedua file ini berasal dari OSX-KVM.
Anda tidak perlu menyentuh kedua file ini.
config.plist memiliki 5 nilai yang diganti dengan placeholder. Klik di sini untuk melihat nilai-nilai tersebut tanpa alasan.
generate-unique-machine-values.sh
Skrip ini akan menghasilkan nomor seri, dengan Alamat Mac, ditambah output ke CSV/TSV, plus membuat bootdisk image
. Anda dapat membuat ratusan, ./custom/generate-unique-machine-values.sh --help
./custom/generate-unique-machine-values.sh
--count 1
--tsv ./serial.tsv
--bootdisks
--output-bootdisk OpenCore.qcow2
--output-env source.env.sh
Atau jika Anda memiliki nomor seri tertentu...
generate-specific-bootdisk.sh
generate-specific-bootdisk.sh
--model " ${DEVICE_MODEL} "
--serial " ${SERIAL} "
--board-serial " ${BOARD_SERIAL} "
--uuid " ${UUID} "
--mac-address " ${MAC_ADDRESS} "
--output-bootdisk OpenCore-nopicker.qcow2
# proof of concept only, generates random serial numbers, headlessly, and quits right after.
docker run --rm -it
--device /dev/kvm
-p 50922:10022
-e NOPICKER=true
-e GENERATE_UNIQUE=true
-e DEVICE_MODEL= " iMacPro1,1 "
sickcodes/docker-osx:auto
# -e OSX_COMMANDS='ioreg -l | grep IOPlatformSerialNumber'
# run the same as above 17gb auto image, with SSH, with nopicker, and save the bootdisk for later.
# you don't need to save the bootdisk IF you supply specific serial numbers!
docker run -it
--device /dev/kvm
-p 50922:10022
-e NOPICKER=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
-e OSX_COMMANDS= ' ioreg -l | grep IOPlatformSerialNumber '
sickcodes/docker-osx:auto
# run an existing image in current directory, with a screen, with SSH, with nopicker.
stat mac_hdd_ng.img # make sure you have an image if you're using :naked
docker run -it
-v " ${PWD} /mac_hdd_ng.img:/image "
--device /dev/kvm
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v /tmp/.X11-unix:/tmp/.X11-unix
-p 50922:10022
-e NOPICKER=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
-e WIDTH=1000
-e HEIGHT=1000
sickcodes/docker-osx:naked
Jika Anda ingin membuat nomor seri, buatlah saat runtime menggunakan -e GENERATE_UNIQUE=true
Atau Anda dapat membuatnya di dalam folder ./custom
. Dan kemudian gunakan:
-e GENERATE_SPECIFIC=true
-e SERIAL= " "
-e BOARD_SERIAL= " "
-e UUID= " "
-e MAC_ADDRESS= " "
stat mac_hdd_ng_testing.img
touch ./output.env
# generate fresh random serial numbers, with a screen, using your own image, and save env file with your new serial numbers for later.
docker run -it
--device /dev/kvm
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v /tmp/.X11-unix:/tmp/.X11-unix
-p 50922:10022
-e NOPICKER=true
-e GENERATE_UNIQUE=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-v " ${PWD} /output.env:/env "
-v " ${PWD} /mac_hdd_ng_testing.img:/image "
sickcodes/docker-osx:naked
Untuk menggunakan iMessage atau iCloud Anda perlu mengubah 5
nilai.
SERIAL
BOARD_SERIAL
UUID
MAC_ADDRESS
ROM
hanyalah alamat mac dengan huruf kecil, tanpa :
di antara setiap kata.
Anda dapat memberi tahu penampung untuk membuatkannya untuk Anda menggunakan -e GENERATE_UNIQUE=true
Atau beri tahu wadah untuk menggunakan wadah tertentu menggunakan -e GENERATE_SPECIFIC=true
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
Resolusi tampilan dikontrol oleh baris ini:
https://github.com/sickcodes/Docker-OSX/blob/master/custom/config-nopicker-custom.plist#L819
Daripada memasang disk tersebut, Docker-OSX akan menghasilkan OpenCore.qcow2
baru dengan menggunakan satu trik keren ini:
-e GENERATE_UNIQUE=true
-e WIDTH=800
-e HEIGHT=600
Untuk menggunakan WIDTH
/ HEIGHT
, Anda harus menggunakan -e GENERATE_UNIQUE=true
atau -e GENERATE_SPECIFIC=true
.
Booting memerlukan waktu sekitar 30 detik lebih lama karena perlu membuat partisi boot baru menggunakan libguestfs
.
-e GENERATE_SPECIFIC=true
-e WIDTH=1920
-e HEIGHT=1080
-e SERIAL= " "
-e BOARD_SERIAL= " "
-e UUID= " "
-e MAC_ADDRESS= " "
# using an image in your current directory
stat mac_hdd_ng.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_SPECIFIC=true
-e DEVICE_MODEL= " iMacPro1,1 "
-e SERIAL= " C02TW0WAHX87 "
-e BOARD_SERIAL= " C027251024NJG36UE "
-e UUID= " 5CCB366D-9118-4C61-A00A-E5BAF3BED451 "
-e MAC_ADDRESS= " A8:5C:2C:9A:46:2F "
-e MASTER_PLIST_URL=https://raw.githubusercontent.com/sickcodes/Docker-OSX/master/custom/config-nopicker-custom.plist
-e WIDTH=1600
-e HEIGHT=900
sickcodes/docker-osx:naked
# generating random serial numbers, using the DIY installer, along with the screen resolution changes.
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e GENERATE_UNIQUE=true
-e WIDTH=800
-e HEIGHT=600
sickcodes/docker-osx:latest
Berikut beberapa resolusi lainnya! Jika resolusi Anda tidak valid, resolusi defaultnya adalah 800x600.
-e WIDTH=800
-e HEIGHT=600
-e WIDTH=1280
-e HEIGHT=768
-e WIDTH=1600
-e HEIGHT=900
-e WIDTH=1920
-e HEIGHT=1080
-e WIDTH=2560
-e HEIGHT=1600
Langkah pertama adalah menghentikan daemon buruh pelabuhan
sudo systemctl stop docker
Langkah kedua adalah mengubah konfigurasi container di
/var/lib/docker/containers/[container-id]/config.v2.json
(Misalkan WIDTH asli Anda adalah 1024 dan HEIGHT adalah 768, Anda dapat mencari 1024 dan menggantinya dengan nilai baru. Sama untuk 768.)
Langkah terakhir adalah me-restart daemon buruh pelabuhan
sudo systemctl restart docker
Masukkan disk ke dalam wadah sebagai volume dan kemudian masukkan disk lagi ke tambahan baris perintah QEMU dengan.
Gunakan config-custom.plist
karena Anda mungkin ingin melihat menu boot, jika tidak, hilangkan baris pertama:
DISK_TWO= " ${PWD} /mount_me.img "
-e MASTER_PLIST_URL= 'https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist'
-v "${DISK_TWO}:/disktwo"
-e EXTRA= '-device ide-hd,bus=sata.5,drive=DISK-TWO -drive id=DISK-TWO,if=none,file=/disktwo,format=qcow2'
OSX_IMAGE= " ${PWD} /mac_hdd_ng_xcode_bigsur.img "
DISK_TWO= " ${PWD} /mount_me.img "
docker run -it
--device /dev/kvm
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e MASTER_PLIST_URL= ' https://raw.githubusercontent.com/sickcodes/osx-serial-generator/master/config-custom.plist '
-v " ${OSX_IMAGE} " :/image
-v " ${DISK_TWO} " :/disktwo
-e EXTRA= ' -device ide-hd,bus=sata.5,drive=DISK-TWO -drive id=DISK-TWO,if=none,file=/disktwo,format=qcow2 '
sickcodes/docker-osx:naked
Lihat juga: di sini.
Di Docker-OSX, kami menggunakan image qcow2
.
Ini berarti gambar bertambah seiring Anda menggunakannya, tetapi OS tamu menganggap Anda memiliki 200 GB yang tersedia.
HANYA BACA
# mount the qemu image like a real disk
sudo modprobe nbd max_part=8
sudo qemu-nbd --connect=/dev/nbd0 ./image.img
sudo fdisk /dev/nbd0 -l
mkdir -p ./mnt
sudo mount /dev/nbd0p1 ./mnt
# inspect partitions (2 partitions)
sudo fdisk /dev/nbd0 -l
# mount using apfs-linux-rw OR apfs-fuse
mkdir -p ./part
sudo mount /dev/nbd0p2 ./part
sudo apfs-fuse -o allow_other /dev/nbd0p2 ./part
Ketika Anda selesai melihat disk Anda, Anda dapat melepas partisi, disk tersebut, dan menghapus perangkat loopback:
sudo umount ./part
sudo umount ./mnt
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd
Pertama, QEMU harus dimulai sebagai root.
Hal ini juga berpotensi untuk mencapai passthrough USB dengan mengubah izin perangkat dalam wadah. Lihat di sini.
Misalnya, buat Dockerfile baru dengan yang berikut ini
FROM sickcodes/docker-osx
USER arch
RUN sed -i -e s/exec qemu/exec sudo qemu/ ./Launch.sh
COPY --chown=arch ./new_image.img /home/arch/OSX-KVM/mac_hdd_ng.img
Dimana new_image.img
adalah gambar qcow2 yang Anda ekstrak. Kemudian bangun kembali dengan docker build .
Selanjutnya kita perlu mengetahui nomor bus dan port perangkat USB yang ingin kita lewati ke VM:
lsusb -t
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/6p, 5000M
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
| __ Port 2: Dev 5, If 0, Class=Human Interface Device, Driver=usbhid, 12M
| __ Port 2: Dev 5, If 1, Class=Chip/SmartCard, Driver=, 12M
| __ Port 3: Dev 2, If 0, Class=Wireless, Driver=, 12M
| __ Port 3: Dev 2, If 1, Class=Wireless, Driver=, 12M
| __ Port 5: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
| __ Port 5: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
Dalam contoh ini, kita ingin melewati perangkat smartcard. Perangkat yang kita inginkan ada di bus 1 dan port 2.
Mungkin juga ada perbedaan jika perangkat Anda menggunakan USB 2.0 (ehci) vs USB 3.0 (xhci). Lihat di sini untuk lebih jelasnya.
# hostbus and hostport correspond to the numbers from lsusb
# runs in privileged mode to enable access to the usb devices.
docker run
--privileged
--device /dev/kvm
-e RAM=4
-p 50922:10022
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -device virtio-serial-pci -device usb-host,hostbus=1,hostport=2 "
mycustomimage
Anda akan melihat perangkat muncul ketika Anda melakukan system_profiler SPUSBDataType
di shell MacOS.
Catatan Penting: ini akan menyebabkan sistem host kehilangan akses ke perangkat USB saat VM sedang berjalan!
Ini wadah favoritku. Anda dapat menyediakan image disk yang ada sebagai argumen baris perintah Docker.
Tarik gambar keluar menggunakan sudo find /var/lib/docker -name mac_hdd_ng.img -size +10G
Berikan image lokal Anda sendiri dengan argumen perintah -v "${PWD}/mac_hdd_ng.img:/image"
dan gunakan sickcodes/docker-osx:naked
saat menginstruksikan Docker untuk membuat container Anda.
Gambar telanjang adalah untuk mem-boot file .img yang ada, misalnya di direktori kerja saat ini ( $PWD
)
Secara default, gambar ini memiliki variabel bernama NOPICKER
yaitu "true"
. Ini melewatkan menu pemilihan disk. Gunakan -e NOPICKER=false
atau string lain selain kata true
untuk masuk ke menu boot.
Hal ini memungkinkan Anda menggunakan disk lain daripada melewatkan menu boot, misalnya disk pemulihan atau utilitas disk.
docker pull sickcodes/docker-osx:naked
# run your own image + SSH
# change mac_hdd_ng.img
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
sickcodes/docker-osx:naked
# run local copy of the auto image + SSH + Boot menu
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng_auto.img:/image "
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e " NOPICKER=false "
sickcodes/docker-osx:naked
Perintah Mulai Cepat akan langsung berfungsi, asalkan Anda tetap menggunakan baris berikut. Bekerja di mesin auto
& naked
:
-v /tmp/.X11-unix:/tmp/.X11-unix
-e "DISPLAY=${DISPLAY:-:0.0}"
-e OSX_COMMANDS
memungkinkan Anda menjalankan perintah apa pun di dalam wadah
docker pull sickcodes/docker-osx:auto
# boot to OS X shell + display + specify commands to run inside OS X!
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e " OSX_COMMANDS=/bin/bash -c " put your commands here " "
sickcodes/docker-osx:auto
# Boots in a minute or two!
ATAU jika Anda sudah memiliki gambar dan hanya ingin masuk dan menjalankan perintah sewenang-wenang:
docker pull sickcodes/docker-osx:naked-auto
# boot to OS X shell + display + specify commands to run inside OS X!
docker run -it
--device /dev/kvm
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e USERNAME=yourusername
-e PASSWORD=yourpassword
-e " OSX_COMMANDS=/bin/bash -c " put your commands here " "
sickcodes/docker-osx:naked-auto
# Boots in a minute or two!
Ada banyak sekali kasus penggunaan potensial lainnya yang dapat bekerja sempurna dengan Docker-OSX, beberapa di antaranya akan Anda lihat di bawah!
Untuk container tanpa kepala, hapus dua baris berikut dari perintah docker run
Anda:
# -v /tmp/.X11-unix:/tmp/.X11-unix
# -e "DISPLAY=${DISPLAY:-:0.0}"
Hal ini sangat berguna untuk pipeline CI/CD.
# run your own image headless + SSH
docker run -it
--device /dev/kvm
-p 50922:10022
-v " ${PWD} /mac_hdd_ng.img:/image "
sickcodes/docker-osx:naked
Harus mengubah -it menjadi -i agar dapat berinteraksi dengan konsol QEMU
Untuk keluar dari container menggunakan -i Anda harus docker kill <containerid>
. Misalnya, untuk mematikan semuanya, docker ps | xargs docker kill
.
Contoh QEMU VNC asli
docker run -i
--device /dev/kvm
-p 50922:10022
-p 5999:5999
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -display none -vnc 0.0.0.0:99,password=on "
sickcodes/docker-osx:big-sur
# type `change vnc password myvncusername` into the docker terminal and set a password
# connect to localhost:5999 using VNC
# qemu 6 seems to require a username for vnc now
BUKAN TLS/HTTPS Terenkripsi sama sekali!
Atau ssh -N [email protected] -L 5999:127.0.0.1:5999
, di mana 1.1.1.1
adalah IP server jarak jauh Anda.
(Catatan: jika Anda menutup port 5999 dan menggunakan terowongan SSH, ini menjadi aman.)
Tambahkan baris berikut:
-e EXTRA="-display none -vnc 0.0.0.0:99,password=on"
Di terminal Docker, tekan enter
hingga Anda melihat (qemu)
.
Ketik change vnc password someusername
Masukkan kata sandi untuk nama pengguna vnc baru Anda^.
Anda juga memerlukan IP kontainer: docker inspect <containerid> | jq -r '.[0].NetworkSettings.IPAddress'
Atau ip n
biasanya akan menampilkan IP container terlebih dahulu.
Sekarang VNC terhubung menggunakan IP container Docker, misalnya 172.17.0.2:5999
VNC jarak jauh melalui SSH: ssh -N [email protected] -L 5999:172.17.0.2:5999
, dengan 1.1.1.1
adalah IP server jarak jauh Anda dan 172.17.0.2
adalah IP kontainer LAN Anda.
Sekarang Anda dapat menghubungkan VNC secara langsung ke container apa pun yang dibuat dengan perintah ini!
Secara opsional, Anda dapat mengaktifkan protokol SPICE, yang memungkinkan penggunaan remote-viewer
untuk mengakses kontainer OSX Anda, bukan VNC.
Catatan: -disable-ticketing
akan mengizinkan akses yang tidak diautentikasi ke VM. Lihat manual bumbu untuk bantuan menyiapkan akses terotentikasi ("Tiket").
docker run
--device /dev/kvm
-p 3001:3001
-p 50922:10022
-e " DISPLAY= ${DISPLAY :-: 0.0} "
-e EXTRA= " -monitor telnet::45454,server,nowait -nographic -serial null -spice disable-ticketing,port=3001 "
mycustomimage
Kemudian cukup lakukan remote-viewer spice://localhost:3001
dan tambahkan --spice-debug
untuk debugging.
# You can create an image of an already configured and setup container.
# This allows you to effectively duplicate a system.
# To do this, run the following commands
# make note of your container id
docker ps --all
docker commit containerid newImageName
# To run this image do the following
docker run
--device /dev/kvm
--device /dev/snd
-v /tmp/.X11-unix:/tmp/.X11-unix
newImageName
docker pull sickcodes/docker-osx:auto
# boot directly into a real OS X shell with no display (Xvfb) [HEADLESS]
docker run -it
--device /dev/kvm
-p 50922:10022
sickcodes/docker-osx:auto
# username is user
# password is alpine
# Wait 2-3 minutes until you drop into the shell.
docker pull sickcodes/docker-osx:latest
docker run -it
--device /dev/kvm
--device /dev/snd
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
sickcodes/docker-osx:latest
# press CTRL + G if your mouse gets stuck
# scroll down to troubleshooting if you have problems
# need more RAM and SSH on localhost -p 50922?
docker run -it
--device /dev/kvm
--device /dev/snd
-p 50922:10022
-v /tmp/.X11-unix:/tmp/.X11-unix
-e " DISPLAY= ${DISPLAY :-: 0.0} "
sickcodes/docker-osx:latest
# turn on SSH after you've installed OS X in the "Sharing" settings.
ssh user@localhost -p 50922
Tambahkan opsi tambahan -e NOPICKER=true
.
Mesin lama:
# find your containerID
docker ps
# move the no picker script on top of the Launch script
# NEW CONTAINERS
docker exec containerID mv ./Launch-nopicker.sh ./Launch.sh
# VNC-VERSION-CONTAINER
docker exec containerID mv ./Launch-nopicker.sh ./Launch_custom.sh
# LEGACY CONTAINERS
docker exec containerID bash -c " grep -v InstallMedia ./Launch.sh > ./Launch-nopicker.sh
chmod +x ./Launch-nopicker.sh
sed -i -e s/OpenCore.qcow2/OpenCore-nopicker.qcow2/ ./Launch-nopicker.sh
"
Pembaruan otomatis masih aktif di pengaturan penampung. Anda mungkin ingin mematikannya. Kami memiliki rencana masa depan untuk pengembangan seputar hal ini.
${DISPLAY:-:0.0}
? $DISPLAY
adalah variabel shell yang merujuk ke server tampilan X11 Anda.
${DISPLAY}
sama, tetapi memungkinkan Anda untuk menggabungkan variabel seperti ini:
${DISPLAY}_${DISPLAY}
akan mencetak :0.0_:0.0
$DISPLAY_$DISPLAY
akan mencetak :0.0
...karena $DISPLAY_
bukan $DISPLAY
${variable:-fallback}
memungkinkan Anda menyetel variabel "fallback" untuk diganti jika $variable
tidak disetel.
Anda juga dapat menggunakan ${variable:=fallback}
untuk menyetel variabel tersebut (di terminal Anda saat ini).
Di Docker-OSX, kami berasumsi, :0.0
adalah variabel $DISPLAY
default Anda.
Anda dapat melihat apa milik Anda
echo $DISPLAY
Dengan begitu, ${DISPLAY:-:0.0}
akan menggunakan variabel apa pun yang ditetapkan server X11 untuk Anda, jika tidak :0.0
-v /tmp/.X11-unix:/tmp/.X11-unix
? -v
adalah opsi baris perintah Docker yang memungkinkan Anda meneruskan volume ke container.
Direktori yang kami izinkan untuk menggunakan wadah Docker adalah soket tampilan server X.
/tmp/.X11-unix
Jika kita membiarkan container Docker menggunakan soket tampilan yang sama dengan lingkungan kita, maka aplikasi apa pun yang Anda jalankan di dalam container Docker akan muncul di layar Anda juga! https://www.x.org/archive/X11R6.8.0/doc/RELNOTES5.html
Anda mungkin ketika menginisialisasi atau mem-boot ke dalam wadah melihat kesalahan dari konsol (qemu)
dengan bentuk berikut: ALSA lib blahblahblah: (function name) returned error: no such file or directory
. Hal ini kurang lebih diharapkan. Selama Anda dapat mem-boot ke dalam container dan semuanya berfungsi, tidak ada alasan untuk mengkhawatirkan hal ini.
Lihat juga: di sini.