Mac OS X を Docker でネイティブに近いパフォーマンスで実行しましょう!X11 フォワーディング!iMessageのセキュリティ調査!iPhoneのUSBが機能しています!ドッカーコンテナ内のmacOS!
LinuxとWindowsの両方を使用してmacOSのセキュリティ調査を実施してください!
Discordは#docker-osxでアクティブであり、誰でも来て質問やアイデアなどを尋ねることができます。
または、プライベートの場合は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
Docker-OSXがOSX-KVMの上に構築されているアップストリームプロジェクトを維持してくれた@kholiaに感謝します。
また、@Leoyzenによって開始された貴重なフォークKVM-OpenCoreを管理している@thenickdudeにも特に感謝します!
OpenCoreチームに特に感謝します:https://github.com/acidanthera/OpenCorePkg。彼らのよく維持されたブートローダーは、Docker-OSXユーザーが楽しむ優れた機能の多くを提供します:)
このプロジェクトが気に入ったら、ここまたは上流に貢献することを検討してください!
ビデオセットアップチュートリアルもここで入手できます:https://www.youtube.com/watch?v=wLezYl77Ll8
Windowsユーザー:以下のメモを見るには、ここをクリックしてください!
ここで初めてですか?初期設定を試すか、以下の手順を試してカタリナまたはビッグサーのいずれかを使用してください。
docker run -it \
--device /dev/kvm \
-p 50922:10022 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=${DISPLAY:-:0.0}" \
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}" \
sickcodes/docker-osx:big-sur
# docker build -t docker-osx --build-arg SHORTNAME=big-sur .
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' \
sickcodes/docker-osx:monterey
# docker build -t docker-osx --build-arg SHORTNAME=monterey .
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' \
sickcodes/docker-osx:ventura
# docker build -t docker-osx --build-arg SHORTNAME=ventura .
# 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
# passsword is alpine
docker run -it \
--device /dev/kvm \
-p 50922:10022 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=${DISPLAY:-:0.0}" \
sickcodes/docker-osx:high-sierra
# docker build -t docker-osx --build-arg SHORTNAME=high-sierra .
docker run -it \
--device /dev/kvm \
-p 50922:10022 \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e "DISPLAY=${DISPLAY:-:0.0}" \
sickcodes/docker-osx:mojave
# docker build -t docker-osx --build-arg SHORTNAME=mojave .
これは、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 \
sickcodes/docker-osx:naked
最初にゲスト内のネットワーク共有でSSHを有効にします。資格情報を変更します。コンテナはそれ自体を
-e "USERNAME=user"
-e "PASSWORD=password"
~/.ssh/authorized_keys
画面が表示されないため、次のように plist を nopicker と共に使用します。
# 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 \
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セクションを参照してください。
デスクトップPCをお持ちの場合は、@Silfalionの指示を使用できます:https://github.com/Silfalion/Iphone_docker_osx_passthrough
usbfluxdのビデオセットアップチュートリアルは、ここでも利用できます:https://www.youtube.com/watch?v=kTk5fGjK_PM
この方法は、ラップトップ、PC、何でも機能します!
https://github.com/corellium 経由でusbfluxdを@nikiasいただきありがとうございます!
これはLinux内で行われます。
Linuxで3つのターミナルを開きます
LinuxでUSB経由でデバイスを接続すると、https://github.com/corellium/usbfluxd を使用してポートで同じネットワーク上の別のシステムに公開できます。
usbmuxd
5000
がインストールされていることを確認します。
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通常、PCであるDockerブリッジIPですが、任意のIPを使用できます...
ip addr
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
TCP 経由の USB 接続を受け入れ、ローカルとして表示されます。
(ホストのIPアドレスに変更する必要があるかもしれません。
172.17.0.1
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
今、そのドッカーデーモンはオフになっています、/ 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 - ハイシエラ、モハベを追加
ビルド中にこれらのいずれかを選択し、dockerプルを使用する場合は無関係です。
--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
現在、複数の画像があり、それぞれに異なるユースケースがあります(以下で説明)。
ハイシエラ:
モハーベ:
カタリナ:
ビッグサー:
モントレーはあなた自身のイメージを作ります:
Sick.Codesによって事前に作られたカタリナシステム: ユーザー名: 、パスワード:
user
alpine
裸:自分のイメージを持ち込む設定(最初に上記のいずれかを使用します):
ネイキッドオート:上記と同じですが、&と
-e USERNAME
-e PASSWORD
-e OSX_COMMANDS="put your commands here"
localhost:50922)
localhost:8888
docker commit
:auto
このリポジトリのコンテンツの上に構築されたイメージは、便宜上Docker Hubでも利用できます https://hub.docker.com/r/sickcodes/docker-osx
利用可能なDockerイメージとその使用目的の包括的なリストは、手順に記載されています。
Docker-OSX は Kubernetes をサポートしています。
Kubernetes Helm Chart & Documentation は helm ディレクトリの下にあります。
この大きな貢献に貢献してくれたcephasaraに感謝します。
Docker-OSXの実行で軽微な問題が発生した場合、または質問がある場合は、自由に問題を開いてください。
ただし、問題を開く前に、クローズされた問題を確認し、このリポジトリの最新バージョンを使用していることを確認してください — 問題はすでに解決されている可能性があります!また、以下の質問と回答のセクションにも回答が表示される場合があります。
より高度な取り組みのために、次のサポートサービスを提供しています。
興味のある方は、Twitterで@sickcodesお問い合わせいただくか、ここをクリックしてください。
Docker-OSXはGPL v3+の下でライセンスされています。貢献は歓迎され、非常に高く評価されています。実際、プロプライエタリなソフトウェアを作成するためのツールとしてDocker-OSXを使用することが許可されています。
あなたがAppleセキュリティに真剣に取り組んでいて、おそらくAppleバグバウンティプログラム内で6桁のバグ報奨金を見つけているなら、あなたは正しい場所にいます!追記:Hackintosh、OSX-KVM、またはDocker-OSXは合法ですか?
本プロジェクトで言及されている製品名、ロゴ、ブランド、その他の商標は、それぞれの商標所有者に帰属します。これらの商標権者は、いかなる立場でも当社のリポジトリと提携していません。彼らはこのプロジェクトを後援したり支持したりすることはありません。
さまざまな目的に適したいくつかの異なるDocker-OSXイメージが利用可能です。
sickcodes/docker-osx:latest- 試してみたいだけです。
sickcodes/docker-osx:latest- Docker-OSXを使用してXcodeでアプリを開発/保護したい(Xcode、Transporterにサインイン)
sickcodes/docker-osx:naked- CI / CD関連の目的でDocker-OSXを使用したい(Xcode、Transporterにサインイン)
またはを使用して個人のイメージを作成します。次に、画像を画像から引き出します。その後、そのイメージを複製してコンテナにインポートし、コンテナを繰り返し以前の状態に戻すことができます。
:latest
big-sur
:naked
sickcodes/docker-osx:auto- 私はコマンドラインを使用することにのみ興味があります(ソフトウェアをコンパイルしたり、自作をヘッドレスで使用したりするのに役立ちます)。
sickcodes/docker-osx:naked- 私はセキュリティ研究のためにiMessage/iCloudが必要です。
sickcodes/docker-osx:big-sur- ビッグサーを走りたいです。
sickcodes/docker-osx:monterey- モントレーを走りたいです。
sickcodes/docker-osx:ventura- ベンチュラを走らせたい。
sickcodes/docker-osx:high-sierra- ハイシエラを走りたい。
sickcodes/docker-osx: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
Windows で Docker-OSX を実行することは、WSL2 (Windows 11 + Windows Subsystem for Linux 用) を使用して可能です。
ビルド11+(22000H21以降)でWindows2がインストールされている必要があります。
まず、管理者の PowerShell でこのコマンドを実行して、コンピューターに WSL をインストールします。詳細については、こちらをご覧ください。
これにより、デフォルトでUbuntuがインストールされます。
wsl --install
PowerShell を使用して、WSL2 が有効になっていることを確認できます。利用可能な他のディストリビューションを表示するには、 を使用します。
wsl -l -v
wsl -l -o
以前に WSL1 をインストールしたことがある場合は、WSL 2 にアップグレードします。WSL1 から WSL2 にアップグレードするには、このリンクを確認してください。
WSL のインストール後、ファイルの末尾に移動して追加します (ファイルが存在しない場合は作成します)。ファイルの詳細については、このリンクを確認してください。ファイルエクスプローラーのオプションで[隠しファイルを表示]と[ファイル拡張子を表示]を選択していることを確認します。 結果は次のようになります。
C:/Users/<Your_Name>/.wslconfig
nestedVirtualization=true
.wslconfig
[wsl2] nestedVirtualization=true
WSL ディストリビューション (PowerShell で実行) に移動し、コマンドを使用して KVM が有効になっているかどうかを確認します。出力は次のようになります。
wsl
kvm-ok
INFO: /dev/kvm exists KVM acceleration can be used
次に、Windows用のDockerがまだインストールされていない場合は、ダウンロードしてインストールします。
インストール後、[設定]に移動し、次の2つのチェックボックスをオンにします。
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 については、https://github.com/sickcodes/Docker-OSX/discussions/458 を参照してください。
macOS ベースシステムを起動します (Enter キーを押します)。
クリック
Disk Utility
最大のディスク(デフォルトは約200GB)を消去し、小さいディスクは変更しないでください。 -- クリックできない場合は、ディスク サイズを 1 KB 減らす必要があります。
erase
(オプション)容量を制限する場合は、未使用の領域を使用してOSとファイルを格納するためのパーティションを作成します。(Xcode 12パーティションの場合は少なくとも60GB。
クリック
Reinstall macOS
インストール中にシステムが複数回再起動する必要がある場合があります
これは、特にDockerにまだ慣れていない場合に、開始するのに最適な場所です。
コンテナをすばやく作成したいだけですか?コンテナ作成例のセクションをご覧ください。
より具体的/高度なトラブルシューティングの質問と回答は、その他の質問と回答にあります。また、クローズされた問題も確認する必要があります。他の誰かがあなたのような質問をすでに答えているかもしれません あなたがこの文書でそれを見つけることができなくても!
初期設定を参照してください。
docker: unknown server OS: .
See 'docker run --help'.
これは、ドッカーデーモンが実行されていないことを意味します。
pgrep dockerd何も返さない
したがって、いくつかの選択肢があります。
sudo dockerdフォアグラウンドドッカーの使用のために。私はこれを使います。
又は
sudo systemctl --start 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をコンテナに割り当てることができます。
systemd/systemctl によって制御されている場合、または dockerd が制御されている場合は、Docker グループに属している必要があります。 Docker グループに属していない場合:
sudo dockerd
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"
また、に格納されているコンテナーからファイルをプルし、ランタイム引数として Docker イメージを指定することもできます。
.img
/var/lib/docker
:naked
こちらも参照してください。
使用するコンテナは、起動中に停止できます。
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 関連のエラーが 1 つ以上表示されることがあります。まだ行っていない場合は、セットアップ手順を見逃したか、必要なすべての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 ギガバイトです。
-e RAM=3
現在使用可能な RAM よりも多くの RAM をコンテナーに割り当てようとすると、次のようなエラーが表示されることがあります。参照:ここ、ここ。
cannot set up guest memory 'pc.ram': Cannot allocate memory
たとえば(以下)、にはすでに20ギガバイトのRAMが割り当てられています。
buff/cache
[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
これで、nginxはポート10023で到達可能になります。
さらに、次のように複数のステートメントを文字列化することもできます。
-e ADDITIONAL_PORTS='hostfwd=tcp::10023-:80,hostfwd=tcp::10043-:443,'
-p 10023:10023 \
-p 10043:10043 \
コンテナー内からインターネット接続を有効にするために、既定のセットアップでは何もする必要がない場合があります。さらに、動作しなくても動作する可能性があります。
curl
ping
こことこことここの議論を参照してください。
これは、ローカルインストールには必要ありません。
さらに、コンテナで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" \
Full example:
# 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
To share a folder using NFS, setup a folder for on the host machine, for example, and then append to :
/srv/nfs/share
/etc/exports
/srv/nfs/share 127.0.0.1/0(insecure,rw,all_squash,anonuid=1000,anongid=985,no_subtree_check)
You may need to reload exports now, which will begin sharing that directory.
# reload shared folders
sudo exportfs -arv
Give permissions on the shared folder for the and , where and matches that of your linux user;
anonuid
anongid
anonuid
anongid
id -u
id -u ; id -gwill print
userid:groupid
chown 1000:985 /srv/nfs/share chmod u+rwx /srv/nfs/share
Start the Docker-OSX container with the additional flag
--network host
Create and mount the nfs folder from the mac terminal:
mkdir -p ~/mnt sudo mount_nfs -o locallocks 10.0.2.2:/srv/nfs/share ~/mnt
Start your container.
Pick a port, for example, .
7700
lsusbto get
vid:pid
On Linux:
sudo usbredirserver -p 7700 1e3d:2096
Now, in the Docker window hit Enter to see the console.
(qemu)
You can add/remove the disk using commands like this, even once the machine is started:
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's default firewall settings may prevent Docker's network interface from reaching the internet. In order to reoslve this, you will need to whitelist the interface in your firewall:
# Set the docker0 bridge to the trusted zone
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
Check if your machine has hardware virtualization enabled:
sudo tee /sys/module/kvm/parameters/ignore_msrs <<< 1
egrep -c '(svm|vmx)' /proc/cpuinfo
-e NETWORKING=vmxnet3
-e NETWORKING=e1000-82545em
du -sh *
/
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
FROM sickcodes/docker-osx USER arch COPY --chown=arch ./deduped.img /home/arch/OSX-KVM/mac_hdd_ng.img
First make sure autoboot is enabled
Next, you will want to set up SSH to be automatically started.
sudo systemsetup -setremotelogin on
Make sure to commit the new docker image and save it, or rebuild as described in the section on reducing disk space.
Then run it with these arguments.
# 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
If you are building Docker-OSX locally, you'll probably want to use Arch Linux's mirrors.
Mirror locations can be found here (uses two-letter country codes): 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 .
Pass any devices/directories to the Docker container & the QEMU arguments using the handy runtime argument provider option .
-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
Generate serial numbers in OR make docker generate them at runtime (see below).
./custom
At any time, verify your serial number before logging into iCloud, etc.
# 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
Inside the folder you will find scripts.
./custom
4
config-nopicker-custom.plist
opencore-image-ng.sh
These two files are from OSX-KVM.
You don't need to touch these two files.
The config.plist has 5 values replaced with placeholders. Click here to see those values for no reason.
generate-unique-machine-values.shThis script will generate serial numbers, with Mac Addresses, plus output to CSV/TSV, plus make a .
bootdisk image
You can create hundreds,
./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
Or if you have some specific serial numbers...
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
If you want to generate serial numbers, either make them at runtime using
-e GENERATE_UNIQUE=true \
Or you can generate them inside the folder. And then use:
./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
To use iMessage or iCloud you need to change values.
5
SERIAL
BOARD_SERIAL
UUID
MAC_ADDRESS
ROM
is just the lowercased mac address, without :
between each word.
You can tell the container to generate them for you using
-e GENERATE_UNIQUE=true
Or tell the container to use specific ones using
-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" \
The display resolution is controlled by this line:
https://github.com/sickcodes/Docker-OSX/blob/master/custom/config-nopicker-custom.plist#L819
Instead of mounting that disk, Docker-OSX will generate a new by using this one cool trick:
OpenCore.qcow2
-e GENERATE_UNIQUE=true \
-e WIDTH=800 \
-e HEIGHT=600 \
To use /, you must use with either or .
WIDTH
HEIGHT
-e GENERATE_UNIQUE=true
-e GENERATE_SPECIFIC=true
It will take around 30 seconds longer to boot because it needs to make a new boot partition using .
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
Here's a few other resolutions! If you resolution is invalid, it will default to 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 \
First step is to stop the docker daemon
sudo systemctl stop docker
The second step is to change container config in
/var/lib/docker/containers/[container-id]/config.v2.json
(Suppose your original WIDTH is 1024 and HEIGHT is 768, you can search 1024 and replace it with the new value. Same for 768.)
The last step is to restart the docker daemon
sudo systemctl restart docker
Pass the disk into the container as a volume and then pass the disk again into QEMU command line extras with.
Use the because you probably want to see the boot menu, otherwise omit the first line:
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
See also: here.
In Docker-OSX, we are using images.
qcow2
This means the image grows as you use it, but the guest OS thinks you have 200GB available.
READ ONLY
# 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
When you are finishing looking at your disk, you can unmount the partition, the disk, and remove the loopback device:
sudo umount ./part
sudo umount ./mnt
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd
Firstly, QEMU must be started as root.
It is also potentially possible to accomplish USB passthrough by changing the permissions of the device in the container. See here.
For example, create a new Dockerfile with the following
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
Where is the qcow2 image you extracted. Then rebuild with
new_image.img
docker build .
Next we need to find out the bus and port numbers of the USB device we want to pass through to the 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
In this example, we want to pass through a smartcard device. The device we want is on bus 1 and port 2.
There may also be differences if your device is usb 2.0 (ehci) vs usb 3.0 (xhci). See here for more details.
# 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
You should see the device show up when you do in the MacOS shell.
system_profiler SPUSBDataType
Important Note: this will cause the host system to lose access to the USB device while the VM is running!
This is my favourite container. You can supply an existing disk image as a Docker command line argument.
Pull images out using
sudo find /var/lib/docker -size +10G | grep mac_hdd_ng.img
Supply your own local image with the command argument and use when instructing Docker to create your container.
-v "${PWD}/mac_hdd_ng.img:/image"
sickcodes/docker-osx:naked
Naked image is for booting any existing .img file, e.g in the current working directory (
$PWD)
By default, this image has a variable called which is . This skips the disk selection menu. Use or any other string than the word to enter the boot menu.
NOPICKER
"true"
-e NOPICKER=false
true
This lets you use other disks instead of skipping the boot menu, e.g. recovery disk or disk utility.
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
The Quick Start command should work out of the box, provided that you keep the following lines. Works in & machines:
auto
naked
-v /tmp/.X11-unix:/tmp/.X11-unix \ -e "DISPLAY=${DISPLAY:-:0.0}" \
-e OSX_COMMANDSlets you run any commands inside the container
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!
OR if you have an image already and just want to log in and execute arbitrary commands:
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!
There's a myriad of other potential use cases that can work perfectly with Docker-OSX, some of which you'll see below!
For a headless container, remove the following two lines from your command:
docker run
# -v /tmp/.X11-unix:/tmp/.X11-unix \ # -e "DISPLAY=${DISPLAY:-:0.0}" \
This is particularly helpful for CI/CD pipelines.
# 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
Must change -it to -i to be able to interact with the QEMU console
To exit a container using -i you must docker kill <containerid>
. For example, to kill everything, docker ps | xargs docker kill
.
Native QEMU VNC example
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
NOT TLS/HTTPS Encrypted at all!
Or , where is your remote server IP.
ssh -N root@1.1.1.1 -L 5999:127.0.0.1:5999
1.1.1.1
(Note: if you close port 5999 and use the SSH tunnel, this becomes secure.)
Add the following line:
-e EXTRA="-display none -vnc 0.0.0.0:99,password=on"
In the Docker terminal, press until you see .
enter
(qemu)
Type
change vnc password someusername
Enter a password for your new vnc username^.
You also need the container IP:
docker inspect <containerid> | jq -r '.[0].NetworkSettings.IPAddress'
Or will usually show the container IP first.
ip n
Now VNC connect using the Docker container IP, for example
172.17.0.2:5999
Remote VNC over SSH: , where is your remote server IP and is your LAN container IP.
ssh -N root@1.1.1.1 -L 5999:172.17.0.2:5999
1.1.1.1
172.17.0.2
Now you can direct connect VNC to any container built with this command!
Optionally, you can enable the SPICE protocol, which allows use of to access your OSX container rather than VNC.
remote-viewer
Note: will allow unauthenticated access to the VM. See the spice manual for help setting up authenticated access ("Ticketing").
-disable-ticketing
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
Then simply do and add for debugging.
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
# passsword 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
Add the extra option .
-e NOPICKER=true
Old machines:
# 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
"
Automatic updates are still on in the container's settings. You may wish to turn them off. We have future plans for development around this.
${DISPLAY:-:0.0}
$DISPLAYis the shell variable that refers to your X11 display server.
${DISPLAY}is the same, but allows you to join variables like this:
${DISPLAY}_${DISPLAY}
:0.0_:0.0
$DISPLAY_$DISPLAY
:0.0
...because is not
$DISPLAY_
$DISPLAY
${variable:-fallback}が設定されていない場合に置換される「フォールバック」変数を設定できます。
$variable
を使用して、その変数を(現在のターミナルで)設定することもできます。
${variable:=fallback}
Docker-OSXでは、デフォルトの変数であると想定しています。
:0.0
$DISPLAY
あなたはあなたのものを見ることができます
echo $DISPLAY
そうすれば、X11サーバーが設定した変数を使用します。
${DISPLAY:-:0.0}
: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
こちらも参照してください。