或透過 Linkedin 聯繫(如果它是私人的):https://www.linkedin.com/in/sickcodes
或透過 https://sick.codes/contact/
該項目由 Sick.Codes 維護。 (嘰嘰喳喳)
其他積分可以在這裡找到:https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
此外,所有貢獻者的完整清單可以在這裡找到:https://github.com/sickcodes/Docker-OSX/graphs/contributors
非常感謝 @kholia 維護上游項目,Docker-OSX 建置在 OSX-KVM 之上。
也要特別感謝 @thenickdude,他維護了由 @Leoyzen 發起的有價值的 KVM-OpenCore 分支!
特別感謝 OpenCore 團隊:https://github.com/acidanthera/OpenCorePkg。他們維護良好的引導程式提供了 Docker-OSX 用戶喜歡的許多強大功能:)
如果您喜歡這個項目,請考慮在這裡或上游做出貢獻!
影片設定教學也可以在這裡找到:https://www.youtube.com/watch?v=wLezYl77Ll8
Windows 使用者:點擊此處查看下面的註解!
第一次來這裡?嘗試初始設置,否則請嘗試按照以下說明使用 Catalina 或 Big Sur。
發布名稱及其版本:
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 .
這是下載容器的特別好方法,以防 Docker 的 CDN(或您的連線)速度很慢。
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
首先在來賓內部的網路共用中啟用 SSH。將-e "USERNAME=user"
和-e "PASSWORD=password"
變更為您的憑證。容器會將自身加入到~/.ssh/authorized_keys
由於看不到螢幕,請使用帶有 nopicker 的 PLIST,例如:
# 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
最簡單、最安全的方法是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
如果您有筆記型電腦,請參閱下一個 usbfluxd 部分。
如果您有桌上型電腦,可以使用@Silfalion的說明:https://github.com/Silfalion/Iphone_docker_osx_passthrough
usbfluxd 的影片設定教學也可以在這裡找到:https://www.youtube.com/watch?v=kTk5fGjK_PM
此方法適用於筆記型電腦、PC 或任何裝置!
感謝 @nikias 透過 https://github.com/corellium 提供的 usbfluxd!
這是在 Linux 內部完成的。
在Linux上開啟3個終端
在 Linux 上透過 USB 連接裝置可讓您使用 https://github.com/corellium/usbfluxd 將連接埠5000
上的usbmuxd
公開到同一網路上的另一個系統。
確保已安裝usbmuxd
、 socat
和usbfluxd
。
sudo pacman -S libusbmuxd usbmuxd avahi socat
在 AUR 上可用:https://aur.archlinux.org/packages/usbfluxd/
yay usbfluxd
插入您的 iPhone 或 iPad。
1 號航廈
sudo systemctl start usbmuxd
sudo avahi-daemon
2 號航廈:
# on host
sudo systemctl restart usbmuxd
sudo socat tcp-listen:5000,fork unix-connect:/var/run/usbmuxd
3 號航廈:
sudo usbfluxd -f -n
這是在 macOS 內部完成的。
安裝自製軟體。
172.17.0.1
通常是 Docker 橋接 IP,即您的 PC,但您可以使用ip addr
中的任何 IP ...
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
接受 USB over TCP 連接,並顯示為本機:
(您可能需要將172.17.0.1
更改為主機的 IP 位址。例如檢查ip addr
)
# on the guest
sudo launchctl start usbmuxd
export PATH=/usr/local/sbin: ${PATH}
sudo usbfluxd -f -r 172.17.0.1:5000
關閉 Xcode 等應用程式並重新開啟它們,您的裝置應該會出現!
如果您需要在 Linux 上重新啟動,請清除目前的 usbfluxd、usbmuxd 和 socat:
sudo killall usbfluxd
sudo systemctl restart usbmuxd
sudo killall socat
請參閱 https://github.com/sickcodes/osx-optimizer 中的命令!
按照下面的教學移動 /var/lib/docker
教學在這裡:https://sick.codes/how-to-run-docker-from-block-storage/
只有當您願意擦除所有目前的 Docker 映像/層時,才應遵循上述教學。
安全模式:暫時停用 docker,以便您可以暫時移動 Docker 資料夾。
killall dockerd
systemctl disable --now docker
systemctl disable --now docker.socket
systemctl stop docker
systemctl stop docker.socket
現在,Docker 守護程序已關閉,將 /var/lib/docker 移至某處
然後,在某處符號連結 /var/lib/docker :
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
如果您看到資料夾,則表示它有效。您可以重新啟動 Docker,或者如果您想確定的話,只需重新啟動即可。
2021-11-14 - 增加了 High Sierra、莫哈韋
在建置時選擇其中之一,與使用 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
目前有多個圖像,每個圖像都有不同的用例(如下所述):
高山脈:
莫哈維:
卡塔莉娜:
大蘇爾:
蒙特利打造自己的形象:
文圖拉製作自己的形象:
索諾瑪製作自己的形象:
Sick.Codes 預製的Catalina系統:使用者名稱: user
,密碼: alpine
裸露:自帶影像設定(首先使用上述任何一項):
Naked Auto:與上面相同,但帶有-e USERNAME
& -e PASSWORD
和-e OSX_COMMANDS="put your commands here"
localhost:50922
)localhost:8888
)docker commit
克隆容器:auto
至少 50 GB(一半用於基礎映像,一半用於運行時映像為了方便起見,基於此儲存庫內容建構的映像也可以在Docker Hub上使用:https://hub.docker.com/r/sickcodes/docker-osx
可用 Docker 映像及其預期用途的完整清單可以在說明中找到。
Docker-OSX 支援 Kubernetes。
Kubernetes Helm Chart & Documentation 可以在 helm 目錄下找到。
感謝 cephasara 做出的這項重大貢獻。
如果您在執行 Docker-OSX 時遇到小問題或有任何疑問,請隨時提出問題。
但是,在開啟問題之前,請檢查已關閉的問題並確認您正在使用此儲存庫的最新版本 - 您的問題可能已解決!您可能也會在下面的問題與解答部分中看到您的答案。
關注@sickcodes!
對於更複雜的工作,我們提供以下支援服務:
如果您有興趣,請聯絡 Twitter 上的@sickcodes 或點擊此處。
Docker-OSX 根據 GPL v3+ 獲得許可。歡迎並非常感謝您的貢獻。事實上,您可以使用 Docker-OSX 作為建立專有軟體的工具。
如果您認真對待 Apple 安全性,並且可能在 Apple Bug 賞金計劃中找到 6 位數的 Bug 賞金,那麼您來對地方了!進一步說明:Hackintosh、OSX-KVM 或 Docker-OSX 合法嗎?
本項目中提及的產品名稱、標誌、品牌和其他商標均為其各自商標持有者的財產。這些商標持有者不以任何身分隸屬於我們的儲存庫。他們不以任何方式贊助或認可該項目。
有多種不同的 Docker-OSX 映像可供使用,適用於不同的目的。
sickcodes/docker-osx:latest
- 我只是想嘗試一下。sickcodes/docker-osx:latest
- 我想使用 Docker-OSX 在 Xcode 中開發/保護應用程式(登入 Xcode、Transporter)sickcodes/docker-osx:naked
- 我想將 Docker-OSX 用於 CI/CD 相關目的(登入 Xcode、Transporter)使用:latest
或big-sur
創建您的個人形象。然後,將圖像從圖像中拉出。之後,您將能夠複製該映像並將其匯入到:naked
容器中,以便重複將容器還原到先前的狀態。
sickcodes/docker-osx:auto
- 我只對使用命令列感興趣(對於編譯軟體或無頭使用 Homebrew 很有用)。
sickcodes/docker-osx:naked
- 我需要 iMessage/iCloud 進行安全研究。
sickcodes/docker-osx:big-sur
- 我想運行 Big Sur。
sickcodes/docker-osx:monterey
- 我想運行蒙特雷。
sickcodes/docker-osx:ventura
- 我想運行 Ventura。
sickcodes/docker-osx:sonoma
- 我想運行 Sonoma。
sickcodes/docker-osx:high-sierra
- 我想運行 High Sierra。
sickcodes/docker-osx:mojave
- 我想執行 Mojave。
在執行其他操作之前,您需要在 BIOS 中開啟硬體虛擬化。具體如何取決於您的特定機器(和 BIOS),但它應該很簡單。
然後,您需要 QEMU 和主機上的一些其他依賴項:
# 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
然後,啟用 libvirt 並載入 KVM 核心模組:
sudo systemctl enable --now libvirtd
sudo systemctl enable --now virtlogd
echo 1 | sudo tee /sys/module/kvm/parameters/ignore_msrs
sudo modprobe kvm
使用 WSL2(Windows 11 + Windows Subsystem for Linux)可以在 Windows 上執行 Docker-OSX。
您必須安裝版本 22000+(21H2 或更高版本)的 Windows 11。
首先,透過在管理員 powershell 中執行此命令來在電腦上安裝 WSL。欲了解更多信息,請查看此處。
這將預設安裝 Ubuntu。
wsl --install
您可以在 PowerShell 中使用wsl -l -v
確認 WSL2 已啟用。若要查看可用的其他發行版,請使用wsl -l -o
。
如果您之前安裝了 WSL1,請升級至 WSL 2。
WSL 安裝後,請前往C:/Users/<Your_Name>/.wslconfig
並將nestedVirtualization=true
新增至檔案結尾(如果該檔案不存在,請建立它)。有關.wslconfig
檔案的更多信息,請查看此連結。驗證您是否在檔案總管選項中選擇了「顯示隱藏檔案」和「顯示檔案副檔名」。結果應該是這樣的:
[wsl2]
nestedVirtualization=true
進入您的 WSL 發行版(在 powershell 中執行wsl
)並使用kvm-ok
指令檢查是否啟用了 KVM。輸出應如下所示:
INFO: /dev/kvm exists
KVM acceleration can be used
如果沒有安裝,請使用指令sudo apt -y install bridge-utils cpu-checker libvirt-clients libvirt-daemon qemu qemu-kvm
進行安裝。
如果尚未安裝,請立即下載並安裝 Windows 的 Docker。
安裝後,進入設定並選取這兩個框:
General -> "Use the WSL2 based engine";
Resources -> WSL Integration -> "Enable integration with my default WSL distro",
確保x11-apps
已安裝。如果沒有安裝,請使用指令sudo apt install x11-apps -y
進行安裝。
最後,獲得視訊輸出有3種方式:
若要使用 WSLg 內建的 X-11 伺服器,請變更 docker run 命令中的這兩行以將 Docker-OSX 指向 WSLg。
-e "DISPLAY=${DISPLAY:-:0.0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
或嘗試:
-e "DISPLAY=${DISPLAY:-:0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
有關 Windows 上的 Ubuntu 20.x,請參閱#458
啟動 macOS 基本系統(按 Enter 鍵)
點擊Disk Utility
擦除最大的磁碟(預設約 200GB),不要修改較小的磁碟。 -- 如果您無法點擊erase
,您可能需要將磁碟大小減少1kb
(可選)如果您想限制容量,請使用未使用的空間建立一個分割區來容納作業系統和檔案。 (對於 Xcode 12 分割區至少 60GB。)
點選Reinstall macOS
安裝過程中系統可能需要多次重新啟動
如果您在使用時遇到困難,特別是如果您還不太熟悉 Docker,那麼這是一個很好的起點。
只是想快速製作容器嗎?查看我們的容器建立範例部分。
更具體/進階的故障排除問題和答案可以在更多問題和解答中找到。您還應該檢查已關閉的問題。即使您在本文檔中找不到,其他人也可能已經得到了與您類似的問題的答案!
請參閱初始設定。
docker: unknown server OS: .
See 'docker run --help'.
這意味著您的 docker 守護程式沒有運行。
pgrep dockerd
不應傳回任何內容
因此,您有幾個選擇。
sudo dockerd
用於前台 Docker 使用。我用這個。
或者
sudo systemctl --start dockerd
現在啟動 dockerd 。
或者
sudo systemctl --enable --now dockerd
用於在每次重新啟動時啟動 dockerd,現在。
範例:
-e EXTRA='-smp 6,sockets=3,cores=2'
-e EXTRA='-smp 8,sockets=4,cores=2'
-e EXTRA='-smp 16,sockets=8,cores=2'
請注意,與記憶體不同,CPU 使用是共享的。這樣您就可以將所有 CPU 指派給容器。
如果你使用sudo dockerd
或 dockerd 由 systemd/systemctl 控制,那麼你必須在 Docker 群組中。如果您不在 Docker 群組中:
sudo usermod -aG docker " ${USER} "
如果需要,也可以將自己加入 kvm 和 libvirt 群組:
sudo usermod -aG libvirt " ${USER} "
sudo usermod -aG kvm " ${USER} "
另請參閱:初始設定。
# 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
非常感謝我們的貢獻者,到目前為止,他們已經解決了幾乎所有可以想到的問題!
https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
使用docker run
建立了一個容器,並想稍後再次重複使用底層映像?
注意:首先請參閱容器建立範例,以了解如何達到適用的程度。
這是當您想稍後再次運行相同的容器時使用的。您可能需要使用docker commit
來保存容器,然後才能重新使用它。檢查您的容器是否已使用docker ps --all
進行持久化。
如果你不運行這個,你每次都會有一個新的圖像。
# 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"
您也可以將.img
檔案從儲存在/var/lib/docker
容器中拉出,並將其作為執行時間參數提供給:naked
Docker 映像。
另請參閱:此處。
使用sickcodes/docker-osx:auto
的容器可以在啟動時停止。
# 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 >
如果您尚未完成硬體虛擬化的所有設置,您可能會看到一個或多個與 libgtk 相關的錯誤。如果您還沒有這樣做,請查看初始設定部分和例行檢查部分,因為您可能錯過了設定步驟,或者可能沒有準備好所有所需的 Docker 依賴項。
另請參閱:此處。
如果您尚未設定 xhost,請嘗試以下操作:
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 +
您分配的 RAM 不能多於您的機器的記憶體。預設值為 3 GB: -e RAM=3
。
如果您嘗試為容器分配比目前可用的 RAM 更多的 RAM,則可能會看到類似以下錯誤: cannot set up guest memory 'pc.ram': Cannot allocate memory
。另請參閱:這裡,這裡。
例如(如下) buff/cache
已經包含 20 GB 的已分配 RAM:
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.5Gi 7.0Gi 728Mi 20Gi 26Gi
Swap: 11Gi 0B 11Gi
清除緩衝區和快取:
sudo tee /proc/sys/vm/drop_caches <<< 3
現在再檢查 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
注意:AppleALC、 alcid
和 VoodooHDA-OC 不支援編解碼器。但是,IORegistryExplorer 確實顯示控制器元件正在運作。
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
可以根據您的需求轉送其他連接埠。在這個範例中,我們將使用 Mac OSX 來託管 nginx:
host:10023 <-> 10023:container:10023 <-> 80:guest
在主機上,運行:
docker run -it
--device /dev/kvm
-p 50922:10022
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80, '
-p 10023:10023
sickcodes/docker-osx:auto
在運行容器的終端會話中,運行:
/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
現在應該可以透過連接埠 10023 存取 nginx。
此外,您可以將多個語句串在一起,例如:
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80,hostfwd=tcp::10043-:443, '
-p 10023:10023
-p 10043:10043
您可能不需要使用預設設定執行任何操作即可從容器內部啟用網路連線。此外,即使ping
不起作用, curl
也可能起作用。
請參閱此處、此處和此處的討論。
本地安裝不需要這樣做。
另外請注意,即使您在容器中使用 VPN,它也可能會導致主機洩漏您的 IP。
但是,如果您嘗試遠端連線到 Docker-OSX 實例(例如資料中心託管的 Docker-OSX 執行個體),這可能會提高您的效能:
# 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
與訪客共用資料夾非常簡單。
您的資料夾將轉到 Arch 容器內的 /mnt/hostshare,然後透過 QEMU 傳遞。
然後從 mac 內部使用sudo -S mount_9p hostshare
進行安裝。
例如,
FOLDER= ~ /somefolder
-v " ${FOLDER} :/mnt/hostshare "
-e EXTRA= " -virtfs local,path=/mnt/hostshare,mount_tag=hostshare,security_model=passthrough,id=hostshare "
完整範例:
# 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
若要使用 NFS 共用資料夾,請在主機上設定資料夾,例如/srv/nfs/share
,然後附加到/etc/exports
:
/srv/nfs/share 127.0.0.1/0(insecure,rw,all_squash,anonuid=1000,anongid=985,no_subtree_check)
現在您可能需要重新載入匯出,這將開始共用該目錄。
# reload shared folders
sudo exportfs -arv
來源及解釋
為anonuid
和anongid
授予共享資料夾的權限,其中anonuid
和anongid
與您的 Linux 用戶的相符; id -u
id -u ; id -g
將列印userid:groupid
chown 1000:985 /srv/nfs/share
chmod u+rwx /srv/nfs/share
使用附加標誌--network host
啟動 Docker-OSX 容器
從 mac 終端機建立並掛載 nfs 資料夾:
mkdir -p ~/mnt
sudo mount_nfs -o locallocks 10.0.2.2:/srv/nfs/share ~/mnt
啟動你的容器。
選擇一個端口,例如7700
。
lsusb
取得vid:pid
在 Linux 上: sudo usbredirserver -p 7700 1e3d:2096
現在,在 Docker 視窗中按 Enter 鍵即可看到(qemu)
控制台。
即使機器已啟動,您也可以使用以下命令新增/刪除磁碟:
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 " `
Fedora 的預設防火牆設定可能會阻止 Docker 的網路介面存取網際網路。為了解決此問題,您需要將防火牆中的介面列入白名單:
# Set the docker0 bridge to the trusted zone
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
檢查您的機器是否啟用了硬體虛擬化:
sudo tee /sys/module/kvm/parameters/ignore_msrs <<< 1
egrep -c ' (svm|vmx) ' /proc/cpuinfo
-e NETWORKING=vmxnet3
-e NETWORKING=e1000-82545em
/
目錄開始使用du -sh *
,並找到可以刪除檔案的大目錄。例如不必要的快取檔案、Xcode 平台等。sudo trimforce enable
啟用修剪,然後重新啟動。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
以修復任何錯誤。qemu-img convert -O qcow2 mac_hdd_ng.img deduped.img
並再次檢查錯誤qemu-img convert -c -O qcow2 deduped.img compressed.img
以進一步壓縮映像。雖然這可能會降低運行速度,但它的大小應該會減少約 25%。 FROM sickcodes/docker-osx
USER arch
COPY --chown=arch ./deduped.img /home/arch/OSX-KVM/mac_hdd_ng.img
首先確保自動啟動已啟用
接下來,您需要將 SSH 設定為自動啟動。
sudo systemsetup -setremotelogin on
確保提交新的 docker 映像並保存它,或按照減少磁碟空間部分中的描述進行重建。
然後使用這些參數運行它。
# 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
如果您在本機上建置 Docker-OSX,您可能需要使用 Arch Linux 的映像。
鏡像位置可以在這裡找到(使用兩個字母的國家代碼):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 .
使用方便的執行時間參數提供者選項-e EXTRA=
將任何裝置/目錄傳遞到 Docker 容器和 QEMU 參數。
# 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
在./custom
中產生序號或讓 docker 在運行時產生它們(見下文)。
在登入 iCloud 等之前隨時驗證您的序號。
# 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
在./custom
資料夾中,您會發現4
腳本。
config-nopicker-custom.plist
opencore-image-ng.sh
這兩個檔案來自 OSX-KVM。
您不需要觸及這兩個文件。
config.plist 有 5 個值被佔位符取代。點擊此處無緣無故地查看這些值。
generate-unique-machine-values.sh
此腳本將產生序號、Mac 位址、CSV/TSV 輸出,以及製作bootdisk image
。您可以建立數百個./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
或者如果您有一些特定的序號...
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
如果要產生序號,請在執行時間使用-e GENERATE_UNIQUE=true
或者您可以在./custom
資料夾中產生它們。然後使用:
-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
要使用 iMessage 或 iCloud,您需要變更5
值。
SERIAL
BOARD_SERIAL
UUID
MAC_ADDRESS
ROM
只是小寫的 mac 位址,每個字之間沒有:
。
您可以使用-e GENERATE_UNIQUE=true
告訴容器為您產生它們
或使用-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 "
顯示解析度由這一行控制:
https://github.com/sickcodes/Docker-OSX/blob/master/custom/config-nopicker-custom.plist#L819
Docker-OSX 將使用以下一個很酷的技巧來產生一個新的OpenCore.qcow2
,而不是掛載該磁碟:
-e GENERATE_UNIQUE=true
-e WIDTH=800
-e HEIGHT=600
要使用WIDTH
/ HEIGHT
,必須與-e GENERATE_UNIQUE=true
或-e GENERATE_SPECIFIC=true
一起使用。
啟動將花費大約 30 秒的時間,因為它需要使用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
這是其他一些決議!如果您的解析度無效,它將預設為 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
第一步是停止 docker 守護程式
sudo systemctl stop docker
第二步是更改容器配置
/var/lib/docker/containers/[container-id]/config.v2.json
(假設您原來的WIDTH是1024,HEIGHT是768,您可以搜尋1024並將其替換為新值。768也是如此。)
最後一步是重新啟動 docker 守護程式
sudo systemctl restart docker
將磁碟作為磁碟區傳遞到容器中,然後再次將磁碟傳遞到 QEMU 命令列附加項中。
使用config-custom.plist
因為您可能想查看啟動選單,否則省略第一行:
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
另請參閱:此處。
在 Docker-OSX 中,我們使用qcow2
映像。
這意味著映像會隨著您的使用而成長,但來賓作業系統認為您有 200GB 可用空間。
只讀
# 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
查看磁碟後,可以卸載分割區、磁碟並刪除環回裝置:
sudo umount ./part
sudo umount ./mnt
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd
首先,QEMU 必須以 root 身分啟動。
也可以透過更改容器中裝置的權限來完成 USB 直通。請參閱此處。
例如,使用以下內容建立一個新的 Dockerfile
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
其中new_image.img
是您提取的 qcow2 映像。然後使用docker build .
接下來我們需要找出我們想要傳遞給虛擬機器的 USB 裝置的匯流排和連接埠號碼:
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
在這個例子中,我們想要透過智慧卡設備。我們想要的設備位於匯流排 1 和連接埠 2 上。
如果您的裝置是 USB 2.0 (ehci) 與 USB 3.0 (xhci),也可能有差異。請參閱此處以了解更多詳細資訊。
# 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
當您在 MacOS shell 中執行system_profiler SPUSBDataType
時,您應該會看到該裝置出現。
重要提示:這將導致主機系統在虛擬機器運行時無法存取 USB 裝置!
這是我最喜歡的容器。您可以提供現有磁碟映像作為 Docker 命令列參數。
使用sudo find /var/lib/docker -name mac_hdd_ng.img -size +10G
提取映像
使用命令參數-v "${PWD}/mac_hdd_ng.img:/image"
提供您自己的本機映像,並在指示 Docker 建立容器時使用sickcodes/docker-osx:naked
。
裸映像用於啟動任何現有的 .img 文件,例如當前工作目錄中的 ( $PWD
)
預設情況下,該圖像有一個名為NOPICKER
的變量,其值為"true"
。這將跳過磁碟選擇菜單。使用-e NOPICKER=false
或除true
之外的任何其他字串進入啟動選單。
這使您可以使用其他磁碟,而不必跳過啟動選單,例如恢復磁碟或磁碟實用程式。
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
如果您保留以下行,則「快速啟動」命令應該開箱即用。適用於auto
和naked
:
-v /tmp/.X11-unix:/tmp/.X11-unix
-e "DISPLAY=${DISPLAY:-:0.0}"
-e OSX_COMMANDS
允許您在容器內執行任何命令
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!
或者,如果您已有圖像並且只想登入並執行任意命令:
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!
還有無數其他潛在用例可以與 Docker-OSX 完美配合,您將在下面看到其中一些!
對於無頭容器,請從docker run
指令中刪除以下兩行:
# -v /tmp/.X11-unix:/tmp/.X11-unix
# -e "DISPLAY=${DISPLAY:-:0.0}"
這對 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
必須將 -it 更改為 -i 才能與 QEMU 控制台交互
要使用 -i 退出容器,您必須docker kill <containerid>
。例如,要殺死所有內容, docker ps | xargs docker kill
.
原生 QEMU VNC 範例
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
根本沒有 TLS/HTTPS 加密!
或ssh -N [email protected] -L 5999:127.0.0.1:5999
,其中1.1.1.1
是您的遠端伺服器 IP。
(注意:如果您關閉連接埠 5999 並使用 SSH 隧道,這將變得安全。)
新增以下行:
-e EXTRA="-display none -vnc 0.0.0.0:99,password=on"
在 Docker 終端機中,按enter
直到看到(qemu)
。
鍵入change vnc password someusername
輸入新 vnc 使用者名稱的密碼^。
您還需要容器 IP: docker inspect <containerid> | jq -r '.[0].NetworkSettings.IPAddress'
或者ip n
通常會先顯示容器 IP。
現在VNC使用Docker容器IP進行連接,例如172.17.0.2:5999
透過 SSH 的遠端 VNC: ssh -N [email protected] -L 5999:172.17.0.2:5999
,其中1.1.1.1
是您的遠端伺服器 IP, 172.17.0.2
是您的 LAN 容器 IP。
現在您可以將 VNC 直接連接到使用此命令建置的任何容器!
或者,您可以啟用 SPICE 協議,該協議允許使用remote-viewer
而不是 VNC 來存取您的 OSX 容器。
注意: -disable-ticketing
將允許未經身份驗證存取虛擬機器。請參閱 Spice 手冊以取得設定身分驗證存取(「票務」)的協助。
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
然後只需執行remote-viewer spice://localhost:3001
並新增--spice-debug
進行偵錯。
# 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
新增額外選項-e NOPICKER=true
。
舊機器:
# 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
"
容器設定中的自動更新仍然處於啟用狀態。您可能希望將其關閉。我們對此有未來的發展計畫。
${DISPLAY:-:0.0}
? $DISPLAY
是指您的 X11 顯示伺服器的 shell 變數。
${DISPLAY}
是相同的,但允許您像這樣連接變數:
${DISPLAY}_${DISPLAY}
將列印:0.0_:0.0
$DISPLAY_$DISPLAY
將列印:0.0
....因為$DISPLAY_
不是$DISPLAY
${variable:-fallback}
可讓您設定一個「後備」變量,以便在未設定$variable
時進行替換。
您也可以使用${variable:=fallback}
來設定該變數(在目前終端機中)。
在 Docker-OSX 中,我們假設:0.0
是預設的$DISPLAY
變數。
你可以看到你的是什麼
echo $DISPLAY
這樣, ${DISPLAY:-:0.0}
將使用您的 X11 伺服器為您設定的任何變量,否則:0.0
-v /tmp/.X11-unix:/tmp/.X11-unix
? -v
是一個 Docker 命令列選項,可讓您將磁碟區傳遞到容器。
我們讓 Docker 容器使用的目錄是 X 伺服器顯示套接字。
/tmp/.X11-unix
如果我們讓 Docker 容器使用與我們自己的環境相同的顯示套接字,那麼您在 Docker 容器內執行的任何應用程式也會顯示在您的螢幕上! https://www.x.org/archive/X11R6.8.0/doc/RELNOTES5.html
在初始化或啟動容器時,您可能會看到來自(qemu)
控制台的以下形式的錯誤: ALSA lib blahblahblah: (function name) returned error: no such file or directory
。這些或多或少都是預料之中的。只要您能夠啟動容器並且一切正常,就沒有理由擔心這些。
另請參閱:此處。