O comuníquese a través de Linkedin si es privado: https://www.linkedin.com/in/sickcodes
O a través de https://sick.codes/contact/
Este proyecto es mantenido por Sick.Codes. (Gorjeo)
Se pueden encontrar créditos adicionales aquí: https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
Además, puede encontrar una lista completa de todos los contribuyentes aquí: https://github.com/sickcodes/Docker-OSX/graphs/contributors
Muchas gracias a @kholia por mantener el proyecto upstream, sobre el cual se construye Docker-OSX: OSX-KVM.
¡También un agradecimiento especial a @thenickdude, quien mantiene la valiosa bifurcación KVM-OpenCore, iniciada por @Leoyzen!
Un agradecimiento muy especial al equipo de OpenCore en: https://github.com/acidanthera/OpenCorePkg. Su gestor de arranque bien mantenido proporciona gran parte de la excelente funcionalidad que disfrutan los usuarios de Docker-OSX :)
Si te gusta este proyecto, ¡considera contribuir aquí o en sentido ascendente!
El tutorial de configuración en vídeo también está disponible aquí: https://www.youtube.com/watch?v=wLezYl77Ll8
Usuarios de Windows: ¡haga clic aquí para ver las notas a continuación!
¿Primera vez aquí? Pruebe la configuración inicial; de lo contrario, pruebe las instrucciones a continuación para usar Catalina o Big Sur.
Nombres de lanzamiento y su versión:
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 .
Esta es una forma particularmente buena de descargar el contenedor, en caso de que la CDN de Docker (o su conexión) sea lenta.
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
Primero habilite SSH en el uso compartido de red dentro del invitado. Cambie -e "USERNAME=user"
y -e "PASSWORD=password"
a sus credenciales. El contenedor se agregará a ~/.ssh/authorized_keys
Como no puedes ver la pantalla, usa PLIST con nopicker, por ejemplo:
# 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
La forma más fácil y segura es 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
Si tienes una computadora portátil, consulta la siguiente sección de usbfluxd.
Si tiene una PC de escritorio, puede usar las instrucciones de @Silfalion: https://github.com/Silfalion/Iphone_docker_osx_passthrough
El video tutorial de configuración para usbfluxd también está disponible aquí: https://www.youtube.com/watch?v=kTk5fGjK_PM
¡Este método FUNCIONA en una computadora portátil, PC o cualquier cosa!
¡Gracias @nikias por usbfluxd a través de https://github.com/corellium!
Esto se hace dentro de Linux.
Abrir 3 terminales en Linux
Conectar su dispositivo a través de USB en Linux le permite exponer usbmuxd
en el puerto 5000
usando https://github.com/corellium/usbfluxd a otro sistema en la misma red.
Asegúrese de que usbmuxd
, socat
y usbfluxd
estén instalados.
sudo pacman -S libusbmuxd usbmuxd avahi socat
Disponible en AUR: https://aur.archlinux.org/packages/usbfluxd/
yay usbfluxd
Conecte su iPhone o iPad.
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
Esto se hace dentro de macOS.
Instalar cerveza casera.
172.17.0.1
suele ser la IP del puente Docker, que es su PC, pero puede usar cualquier IP desde 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
Acepte la conexión USB sobre TCP y aparezca como local:
(Es posible que deba cambiar 172.17.0.1
a la dirección IP del host. Por ejemplo, verifique ip addr
)
# on the guest
sudo launchctl start usbmuxd
export PATH=/usr/local/sbin: ${PATH}
sudo usbfluxd -f -r 172.17.0.1:5000
Cierra aplicaciones como Xcode y vuelve a abrirlas, ¡y tu dispositivo debería aparecer!
Si necesita comenzar de nuevo en Linux, borre los archivos usbfluxd, usbmuxd y socat actuales:
sudo killall usbfluxd
sudo systemctl restart usbmuxd
sudo killall socat
¡VEA los comandos en https://github.com/sickcodes/osx-optimizer!
Mueva /var/lib/docker, siguiendo el tutorial a continuación
Tutorial aquí: https://sick.codes/how-to-run-docker-from-block-storage/
Solo siga el tutorial anterior si está satisfecho con borrar todas sus imágenes/capas actuales de Docker.
Modo seguro: deshabilite la ventana acoplable temporalmente para que pueda mover la carpeta Docker temporalmente.
killall dockerd
systemctl disable --now docker
systemctl disable --now docker.socket
systemctl stop docker
systemctl stop docker.socket
Ahora que el demonio Docker está desactivado, mueva /var/lib/docker a alguna parte
Luego, vincule simbólicamente /var/lib/docker en algún lugar:
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
Si ve carpetas, entonces funcionó. Puede reiniciar Docker o simplemente reiniciar si quiere estar seguro.
2021-11-14 - Se agregó High Sierra, Mojave
Elija uno de estos mientras construye , irrelevante cuando use 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
Actualmente existen varias imágenes, cada una con diferentes casos de uso (que se explican a continuación):
Sierra Alta:
Mojave:
Catalina:
Big-Sur:
Monterey haz tu propia imagen:
Ventura crea tu propia imagen:
Sonoma crea tu propia imagen:
Sistema Catalina prefabricado por Sick.Codes: nombre de usuario: user
, contraseña: alpine
Desnudo: configuración de trae tu propia imagen (primero usa cualquiera de los anteriores):
Naked Auto: igual que arriba pero con -e USERNAME
& -e PASSWORD
y -e OSX_COMMANDS="put your commands here"
localhost:50922
)localhost:8888
) si se usa la versión ./vncdocker commit
:auto
(la mitad para la imagen base, la mitad para la imagen en tiempo de ejecución)Las imágenes creadas sobre el contenido de este repositorio también están disponibles en Docker Hub para mayor comodidad: https://hub.docker.com/r/sickcodes/docker-osx
Puede encontrar una lista completa de las imágenes de Docker disponibles y su propósito previsto en las Instrucciones.
Docker-OSX es compatible con Kubernetes.
La documentación y el gráfico de Helm de Kubernetes se pueden encontrar en el directorio de timón.
Gracias cephasara por realizar esta importante contribución.
No dude en abrir un problema si encuentra problemas menores con la ejecución de Docker-OSX o tiene alguna pregunta.
Sin embargo, antes de abrir un problema, verifique los problemas cerrados y confirme que está utilizando la última versión de este repositorio; es posible que sus problemas ya se hayan resuelto. También puede ver su respuesta en nuestra sección de preguntas y respuestas a continuación.
¡Sigue a @sickcodes!
Para esfuerzos más sofisticados, ofrecemos los siguientes servicios de soporte:
En caso de que esté interesado, comuníquese con @sickcodes en Twitter o haga clic aquí.
Docker-OSX tiene licencia GPL v3+. Las contribuciones son bienvenidas y enormemente apreciadas. De hecho, se le permite utilizar Docker-OSX como herramienta para crear software propietario.
Si te tomas en serio la seguridad de Apple y posiblemente encuentres recompensas por errores de 6 cifras dentro del Programa de recompensas por errores de Apple, ¡estás en el lugar correcto! Notas adicionales: ¿Es legal Hackintosh, OSX-KVM o Docker-OSX?
Los nombres de productos, logotipos, marcas y otras marcas comerciales a las que se hace referencia en este proyecto son propiedad de sus respectivos titulares de marcas comerciales. Estos titulares de marcas no están afiliados a nuestro repositorio de ninguna manera. No patrocinan ni respaldan este proyecto de ninguna manera.
Hay varias imágenes de Docker-OSX diferentes disponibles que son adecuadas para diferentes propósitos.
sickcodes/docker-osx:latest
: solo quiero probarlo.sickcodes/docker-osx:latest
- Quiero usar Docker-OSX para desarrollar/proteger aplicaciones en Xcode (iniciar sesión en Xcode, Transporter)sickcodes/docker-osx:naked
- Quiero usar Docker-OSX para fines relacionados con CI/CD (iniciar sesión en Xcode, Transporter) Crea tu imagen personal usando :latest
o big-sur
. Luego, extraiga la imagen de la imagen. Luego, podrá duplicar esa imagen e importarla al contenedor :naked
, para revertir el contenedor a un estado anterior repetidamente.
sickcodes/docker-osx:auto
: solo me interesa usar la línea de comando (útil para compilar software o usar Homebrew sin cabeza).
sickcodes/docker-osx:naked
: necesito iMessage/iCloud para investigaciones de seguridad.
sickcodes/docker-osx:big-sur
: quiero ejecutar Big Sur.
sickcodes/docker-osx:monterey
: quiero ejecutar Monterey.
sickcodes/docker-osx:ventura
- Quiero ejecutar Ventura.
sickcodes/docker-osx:sonoma
: quiero ejecutar Sonoma.
sickcodes/docker-osx:high-sierra
- Quiero ejecutar High Sierra.
sickcodes/docker-osx:mojave
- Quiero ejecutar Mojave.
Antes de hacer cualquier otra cosa, deberá activar la virtualización de hardware en su BIOS. Precisamente cómo dependerá de su máquina particular (y BIOS), pero debería ser sencillo.
Luego, necesitarás QEMU y algunas otras dependencias en tu host:
# 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
Luego, habilite libvirt y cargue el módulo del 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
Es posible ejecutar Docker-OSX en Windows utilizando WSL2 (Windows 11 + Subsistema de Windows para Linux).
Debe tener instalado Windows 11 con la compilación 22000+ (21H2 o superior).
Primero, instale WSL en su computadora ejecutando este comando en un powershell de administrador. Para más información, mira aquí.
Esto instalará Ubuntu de forma predeterminada.
wsl --install
Puede confirmar que WSL2 está habilitado usando wsl -l -v
en PowerShell. Para ver otras distribuciones disponibles, utilice wsl -l -o
.
Si ya instaló WSL1, actualice a WSL 2. Consulte este enlace para actualizar de WSL1 a WSL2.
Después de la instalación de WSL, vaya a C:/Users/<Your_Name>/.wslconfig
y agregue nestedVirtualization=true
al final del archivo (si el archivo no existe, créelo). Para obtener más información sobre el archivo .wslconfig
consulte este enlace. Verifique que haya seleccionado "Mostrar archivos ocultos" y "Mostrar extensiones de archivos" en las opciones del Explorador de archivos. El resultado debería ser así:
[wsl2]
nestedVirtualization=true
Vaya a su distribución WSL (ejecute wsl
en powershell) y verifique si KVM está habilitado usando el comando kvm-ok
. La salida debería verse así:
INFO: /dev/kvm exists
KVM acceleration can be used
Utilice el comando sudo apt -y install bridge-utils cpu-checker libvirt-clients libvirt-daemon qemu qemu-kvm
para instalarlo si no es así.
Ahora descargue e instale Docker para Windows si aún no está instalado.
Después de la instalación, vaya a Configuración y marque estas 2 casillas:
General -> "Use the WSL2 based engine";
Resources -> WSL Integration -> "Enable integration with my default WSL distro",
Asegúrese de que x11-apps
esté instalado. Utilice el comando sudo apt install x11-apps -y
para instalarlo si no es así.
Finalmente, hay 3 formas de obtener salida de vídeo:
Para utilizar el servidor X-11 integrado de WSLg, cambie estas dos líneas en el comando docker run para que apunte Docker-OSX a WSLg.
-e "DISPLAY=${DISPLAY:-:0.0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
O prueba:
-e "DISPLAY=${DISPLAY:-:0}"
-v /mnt/wslg/.X11-unix:/tmp/.X11-unix
Para Ubuntu 20.x en Windows, consulte el n.º 458
Inicie el sistema base macOS (presione Enter)
Haga clic en Disk Utility
Borre el disco MÁS GRANDE (alrededor de 200 GB por defecto), NO MODIFIQUE LOS DISCOS MÁS PEQUEÑOS. - si no puede hacer clic en erase
, es posible que deba reducir el tamaño del disco en 1 kb
(opcional) Cree una partición utilizando el espacio no utilizado para albergar el sistema operativo y sus archivos si desea limitar la capacidad. (Para la partición Xcode 12, al menos 60 GB).
Haga clic en Reinstall macOS
Es posible que el sistema requiera varios reinicios durante la instalación.
Este es un excelente lugar para comenzar si tiene problemas para comenzar, especialmente si aún no está familiarizado con Docker.
¿Solo buscas hacer un contenedor rápidamente? Consulte nuestra sección de ejemplos de creación de contenedores.
Puede encontrar preguntas y respuestas más específicas/avanzadas sobre solución de problemas en Más preguntas y respuestas. También deberías consultar los números cerrados. Es posible que otra persona ya haya recibido respuesta a una pregunta como la suya, incluso si no puede encontrarla en este documento.
Ver configuración inicial.
docker: unknown server OS: .
See 'docker run --help'.
Esto significa que su demonio acoplable no se está ejecutando.
pgrep dockerd
no debería devolver nada
Por lo tanto, tienes algunas opciones.
sudo dockerd
para el uso de Docker en primer plano. Yo uso esto.
O
sudo systemctl --start dockerd
para iniciar dockerd esto ahora.
O
sudo systemctl --enable --now dockerd
para iniciar dockerd en cada reinicio y ahora.
Ejemplos:
-e EXTRA='-smp 6,sockets=3,cores=2'
-e EXTRA='-smp 8,sockets=4,cores=2'
-e EXTRA='-smp 16,sockets=8,cores=2'
Tenga en cuenta que, a diferencia de la memoria, el uso de la CPU se comparte. para que pueda asignar todas sus CPU al contenedor.
Si usa sudo dockerd
o dockerd está controlado por systemd/systemctl, entonces debe estar en el grupo Docker. Si no estás en el grupo Docker:
sudo usermod -aG docker " ${USER} "
y también agréguese a los grupos kvm y libvirt si es necesario:
sudo usermod -aG libvirt " ${USER} "
sudo usermod -aG kvm " ${USER} "
Ver también: configuración inicial.
# 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
¡Muchas gracias a nuestros colaboradores que han resuelto casi todos los problemas imaginables hasta ahora!
https://github.com/sickcodes/Docker-OSX/blob/master/CREDITS.md
¿Creó un contenedor con docker run
y desea reutilizar la imagen subyacente nuevamente más tarde?
NB: consulte primero los ejemplos de creación de contenedores para saber cómo llegar al punto en el que esto es aplicable.
Esto es para cuando quieras volver a ejecutar el MISMO contenedor más tarde. Es posible que necesites usar docker commit
para guardar tu contenedor antes de poder reutilizarlo. Compruebe si su contenedor persiste con docker ps --all
.
Si no ejecuta esto, tendrá una nueva imagen cada vez.
# 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"
También puede extraer el archivo .img
del contenedor, que está almacenado en /var/lib/docker
, y proporcionarlo como argumento de tiempo de ejecución para la imagen de Docker :naked
.
Ver también: aquí.
Los contenedores que utilizan sickcodes/docker-osx:auto
se pueden detener mientras se inician.
# 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 >
Es posible que vea uno o más errores relacionados con libgtk si aún no tiene todo configurado para la virtualización de hardware. Si aún no lo ha hecho, consulte la sección de configuración inicial y la sección de comprobaciones de rutina, ya que es posible que se haya saltado un paso de configuración o que no tenga todas las dependencias de Docker necesarias listas para funcionar.
Ver también: aquí.
Si aún no ha configurado xhost, intente lo siguiente:
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 +
No puede asignar más RAM de la que tiene su máquina. El valor predeterminado es 3 Gigabytes: -e RAM=3
.
Si está intentando asignar más RAM al contenedor de la que tiene actualmente disponible, es posible que vea un error como el siguiente: cannot set up guest memory 'pc.ram': Cannot allocate memory
. Ver también: aquí, aquí.
Por ejemplo (a continuación), el buff/cache
ya contiene 20 Gigabytes de RAM asignada:
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.5Gi 7.0Gi 728Mi 20Gi 26Gi
Swap: 11Gi 0B 11Gi
Borre el búfer y el caché:
sudo tee /proc/sys/vm/drop_caches <<< 3
Ahora revisa la RAM nuevamente:
[user@hostname ~] $ free -mh
total used free shared buff/cache available
Mem: 30Gi 3.3Gi 26Gi 697Mi 1.5Gi 26Gi
Swap: 11Gi 0B 11Gi
Nota: AppleALC, alcid
y VoodooHDA-OC no son compatibles con códecs. Sin embargo, IORegistryExplorer muestra el componente del controlador funcionando.
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
Es posible reenviar puertos adicionales según sus necesidades. En este ejemplo, usaremos Mac OSX para alojar nginx:
host:10023 <-> 10023:container:10023 <-> 80:guest
En la máquina host, ejecute:
docker run -it
--device /dev/kvm
-p 50922:10022
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80, '
-p 10023:10023
sickcodes/docker-osx:auto
En una sesión de Terminal ejecutando el contenedor, ejecute:
/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
Ahora debería poder accederse a nginx en el puerto 10023.
Además, puede encadenar varias declaraciones, por ejemplo:
-e ADDITIONAL_PORTS= ' hostfwd=tcp::10023-:80,hostfwd=tcp::10043-:443, '
-p 10023:10023
-p 10043:10043
Es posible que no necesite hacer nada con la configuración predeterminada para habilitar la conectividad a Internet desde el interior del contenedor. Además, curl
puede funcionar incluso si ping
no funciona.
Vea la discusión aquí y aquí y aquí.
Esto no es necesario para instalaciones LOCALES.
Además, tenga en cuenta que puede hacer que el host filtre su IP, incluso si está usando una VPN en el contenedor.
Sin embargo, si intenta conectarse a una instancia de Docker-OSX de forma remota (por ejemplo, una instancia de Docker-OSX alojada en un centro de datos), esto puede mejorar su rendimiento:
# 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
Compartir una carpeta con un invitado es bastante sencillo.
Su carpeta irá a /mnt/hostshare dentro del contenedor Arch que luego pasa por QEMU.
Luego monte usando sudo -S mount_9p hostshare
desde dentro de la Mac.
Por ejemplo,
FOLDER= ~ /somefolder
-v " ${FOLDER} :/mnt/hostshare "
-e EXTRA= " -virtfs local,path=/mnt/hostshare,mount_tag=hostshare,security_model=passthrough,id=hostshare "
Ejemplo completo:
# 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
Para compartir una carpeta usando NFS, configure una carpeta en la máquina host, por ejemplo, /srv/nfs/share
y luego agréguela a /etc/exports
:
/srv/nfs/share 127.0.0.1/0(insecure,rw,all_squash,anonuid=1000,anongid=985,no_subtree_check)
Es posible que deba volver a cargar las exportaciones ahora, lo que comenzará a compartir ese directorio.
# reload shared folders
sudo exportfs -arv
Fuente y explicación
Otorgue permisos en la carpeta compartida para anonuid
y anongid
, donde anonuid
y anongid
coincidan con los de su usuario de Linux; id -u
id -u ; id -g
imprimirá userid:groupid
chown 1000:985 /srv/nfs/share
chmod u+rwx /srv/nfs/share
Inicie el contenedor Docker-OSX con el indicador adicional --network host
Cree y monte la carpeta nfs desde la terminal mac:
mkdir -p ~/mnt
sudo mount_nfs -o locallocks 10.0.2.2:/srv/nfs/share ~/mnt
Inicie su contenedor.
Elija un puerto, por ejemplo, 7700
.
lsusb
para obtener vid:pid
En Linux: sudo usbredirserver -p 7700 1e3d:2096
Ahora, en la ventana de Docker, presione Enter para ver la consola (qemu)
.
Puede agregar/quitar el disco usando comandos como este, incluso una vez que se inicia la máquina:
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 " `
La configuración predeterminada del firewall de Fedora puede impedir que la interfaz de red de Docker llegue a Internet. Para resolver esto, deberá incluir la interfaz en la lista blanca de su firewall:
# Set the docker0 bridge to the trusted zone
sudo firewall-cmd --permanent --zone=trusted --add-interface=docker0
sudo firewall-cmd --reload
Compruebe si su máquina tiene habilitada la virtualización de hardware:
sudo tee /sys/module/kvm/parameters/ignore_msrs <<< 1
egrep -c ' (svm|vmx) ' /proc/cpuinfo
-e NETWORKING=vmxnet3
-e NETWORKING=e1000-82545em
du -sh *
comenzando desde el directorio /
y buscar directorios grandes donde se puedan eliminar archivos. Por ejemplo, archivos en caché innecesarios, plataformas Xcode, etc.sudo trimforce enable
y reinicie.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
para corregir cualquier error.qemu-img convert -O qcow2 mac_hdd_ng.img deduped.img
y verifique si hay errores nuevamenteqemu-img convert -c -O qcow2 deduped.img compressed.img
para comprimir aún más la imagen. Sin embargo, esto puede reducir la velocidad del tiempo de ejecución, pero debería reducir el tamaño en aproximadamente un 25%. FROM sickcodes/docker-osx
USER arch
COPY --chown=arch ./deduped.img /home/arch/OSX-KVM/mac_hdd_ng.img
Primero asegúrese de que el arranque automático esté habilitado
A continuación, querrás configurar SSH para que se inicie automáticamente.
sudo systemsetup -setremotelogin on
Asegúrese de confirmar la nueva imagen de la ventana acoplable y guardarla, o reconstruirla como se describe en la sección sobre reducción de espacio en disco.
Luego ejecútelo con estos argumentos.
# 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
Si está compilando Docker-OSX localmente, probablemente querrá usar las réplicas de Arch Linux.
Las ubicaciones de los espejos se pueden encontrar aquí (utiliza códigos de país de dos letras): 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 .
Pase cualquier dispositivo/directorio al contenedor Docker y los argumentos QEMU utilizando la práctica opción de proveedor de argumentos en tiempo de ejecución -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
Genere números de serie en ./custom
O haga que Docker los genere en tiempo de ejecución (ver más abajo).
En cualquier momento, verifique su número de serie antes de iniciar sesión en 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
Dentro de la carpeta ./custom
encontrarás 4
scripts.
config-nopicker-custom.plist
opencore-image-ng.sh
Estos dos archivos son de OSX-KVM.
No es necesario tocar estos dos archivos.
El config.plist tiene 5 valores reemplazados con marcadores de posición. Haga clic aquí para ver esos valores sin ningún motivo.
generate-unique-machine-values.sh
Este script generará números de serie, con direcciones Mac, además de salida a CSV/TSV, además creará una bootdisk image
. Puedes crear cientos, ./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
O si tienes algunos números de serie específicos...
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
Si desea generar números de serie, hágalo en tiempo de ejecución usando -e GENERATE_UNIQUE=true
O puedes generarlos dentro de la carpeta ./custom
. Y luego usa:
-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
Para usar iMessage o iCloud necesitas cambiar 5
valores.
SERIAL
BOARD_SERIAL
UUID
MAC_ADDRESS
ROM
es solo la dirección mac en minúsculas, sin :
entre cada palabra.
Puede decirle al contenedor que los genere usando -e GENERATE_UNIQUE=true
O dígale al contenedor que use unos específicos usando -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 "
La resolución de la pantalla está controlada por esta línea:
https://github.com/sickcodes/Docker-OSX/blob/master/custom/config-nopicker-custom.plist#L819
En lugar de montar ese disco, Docker-OSX generará un nuevo OpenCore.qcow2
usando este genial truco:
-e GENERATE_UNIQUE=true
-e WIDTH=800
-e HEIGHT=600
Para usar WIDTH
/ HEIGHT
, debe usarlo con -e GENERATE_UNIQUE=true
o -e GENERATE_SPECIFIC=true
.
El arranque tardará unos 30 segundos más porque necesita crear una nueva partición de arranque usando 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
¡Aquí hay algunas otras resoluciones! Si su resolución no es válida, la resolución predeterminada será 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
El primer paso es detener el demonio acoplable.
sudo systemctl stop docker
El segundo paso es cambiar la configuración del contenedor en
/var/lib/docker/containers/[container-id]/config.v2.json
(Supongamos que su ANCHO original es 1024 y su ALTURA es 768, puede buscar 1024 y reemplazarlo con el nuevo valor. Lo mismo para 768).
El último paso es reiniciar el demonio acoplable.
sudo systemctl restart docker
Pase el disco al contenedor como un volumen y luego pase el disco nuevamente a los extras de la línea de comando QEMU con.
Utilice config-custom.plist
porque probablemente desee ver el menú de inicio; de lo contrario, omita la primera línea:
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
Ver también: aquí.
En Docker-OSX, utilizamos imágenes qcow2
.
Esto significa que la imagen crece a medida que la usas, pero el sistema operativo invitado cree que tienes 200 GB disponibles.
SOLO LECTURA
# 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
Cuando termine de mirar su disco, puede desmontar la partición, el disco y quitar el dispositivo de loopback:
sudo umount ./part
sudo umount ./mnt
sudo qemu-nbd --disconnect /dev/nbd0
sudo rmmod nbd
En primer lugar, QEMU debe iniciarse como root.
También es posible lograr el paso USB cambiando los permisos del dispositivo en el contenedor. Ver aquí.
Por ejemplo, cree un nuevo Dockerfile con lo siguiente
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
Donde new_image.img
es la imagen qcow2 que extrajiste. Luego reconstruya con docker build .
A continuación, debemos averiguar los números de puerto y bus del dispositivo USB que queremos pasar a la 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
En este ejemplo, queremos pasar por un dispositivo de tarjeta inteligente. El dispositivo que queremos está en el bus 1 y el puerto 2.
También puede haber diferencias si su dispositivo es USB 2.0 (ehci) frente a USB 3.0 (xhci). Consulte aquí para obtener más detalles.
# 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
Debería ver aparecer el dispositivo cuando ejecuta system_profiler SPUSBDataType
en el shell de MacOS.
Nota importante: ¡esto hará que el sistema host pierda el acceso al dispositivo USB mientras la VM se está ejecutando!
Este es mi recipiente favorito. Puede proporcionar una imagen de disco existente como argumento de la línea de comando de Docker.
Extraiga imágenes usando sudo find /var/lib/docker -name mac_hdd_ng.img -size +10G
Proporcione su propia imagen local con el argumento de comando -v "${PWD}/mac_hdd_ng.img:/image"
y use sickcodes/docker-osx:naked
cuando le indique a Docker que cree su contenedor.
La imagen desnuda sirve para iniciar cualquier archivo .img existente, por ejemplo, en el directorio de trabajo actual ( $PWD
)
Por defecto, esta imagen tiene una variable llamada NOPICKER
que es "true"
. Esto omite el menú de selección de disco. Utilice -e NOPICKER=false
o cualquier otra cadena que no sea la palabra true
para ingresar al menú de inicio.
Esto le permite utilizar otros discos en lugar de omitir el menú de inicio, por ejemplo, el disco de recuperación o la utilidad de disco.
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
El comando Inicio rápido debería funcionar de inmediato, siempre que mantenga las siguientes líneas. Funciona en auto
y máquinas naked
:
-v /tmp/.X11-unix:/tmp/.X11-unix
-e "DISPLAY=${DISPLAY:-:0.0}"
-e OSX_COMMANDS
te permite ejecutar cualquier comando dentro del contenedor
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!
O si ya tiene una imagen y solo desea iniciar sesión y ejecutar comandos arbitrarios:
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!
Hay una gran cantidad de otros casos de uso potenciales que pueden funcionar perfectamente con Docker-OSX, ¡algunos de los cuales verás a continuación!
Para un contenedor sin cabeza, elimine las dos líneas siguientes del comando docker run
:
# -v /tmp/.X11-unix:/tmp/.X11-unix
# -e "DISPLAY=${DISPLAY:-:0.0}"
Esto es particularmente útil para las canalizaciones de 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
Debe cambiar -it a -i para poder interactuar con la consola QEMU
Para salir de un contenedor usando -i debes docker kill <containerid>
. Por ejemplo, para eliminar todo, docker ps | xargs docker kill
.
Ejemplo nativo de 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
¡NO está cifrado TLS/HTTPS en absoluto!
O ssh -N [email protected] -L 5999:127.0.0.1:5999
, donde 1.1.1.1
es la IP de su servidor remoto.
(Nota: si cierra el puerto 5999 y usa el túnel SSH, esto se vuelve seguro).
Agregue la siguiente línea:
-e EXTRA="-display none -vnc 0.0.0.0:99,password=on"
En la terminal Docker, presione enter
hasta que vea (qemu)
.
Escriba change vnc password someusername
Ingrese una contraseña para su nuevo nombre de usuario de vnc^.
También necesita la IP del contenedor: docker inspect <containerid> | jq -r '.[0].NetworkSettings.IPAddress'
O ip n
normalmente mostrará primero la IP del contenedor.
Ahora VNC se conecta usando la IP del contenedor Docker, por ejemplo 172.17.0.2:5999
VNC remoto a través de SSH: ssh -N [email protected] -L 5999:172.17.0.2:5999
, donde 1.1.1.1
es la IP de su servidor remoto y 172.17.0.2
es la IP de su contenedor LAN.
¡Ahora puede conectar VNC directamente a cualquier contenedor creado con este comando!
Opcionalmente, puede habilitar el protocolo SPICE, que permite el uso de un remote-viewer
para acceder a su contenedor OSX en lugar de VNC.
Nota: -disable-ticketing
permitirá el acceso no autenticado a la VM. Consulte el manual de Spice para obtener ayuda para configurar el acceso autenticado ("Emisión de entradas").
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
Luego simplemente haga remote-viewer spice://localhost:3001
y agregue --spice-debug
para la depuración.
# 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
Agregue la opción adicional -e NOPICKER=true
.
Máquinas antiguas:
# 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
"
Las actualizaciones automáticas todavía están activas en la configuración del contenedor. Es posible que desee apagarlos. Tenemos planes futuros de desarrollo en torno a esto.
${DISPLAY:-:0.0}
? $DISPLAY
es la variable de shell que hace referencia a su servidor de visualización X11.
${DISPLAY}
es igual, pero te permite unir variables como esta:
${DISPLAY}_${DISPLAY}
imprimiría :0.0_:0.0
$DISPLAY_$DISPLAY
imprimiría :0.0
...porque $DISPLAY_
no es $DISPLAY
${variable:-fallback}
le permite configurar una variable "alternativa" para ser sustituida si $variable
no está configurada.
También puedes usar ${variable:=fallback}
para configurar esa variable (en tu terminal actual).
En Docker-OSX, asumimos que :0.0
es su variable $DISPLAY
predeterminada.
Puedes ver cual es el tuyo.
echo $DISPLAY
De esa manera, ${DISPLAY:-:0.0}
usará cualquier variable que su servidor X11 haya configurado para usted, de lo contrario :0.0
-v /tmp/.X11-unix:/tmp/.X11-unix
? -v
es una opción de línea de comandos de Docker que le permite pasar un volumen al contenedor.
El directorio que permitimos que use el contenedor Docker es un socket de visualización del servidor X.
/tmp/.X11-unix
Si permitimos que el contenedor Docker use el mismo conector de pantalla que nuestro propio entorno, entonces cualquier aplicación que ejecute dentro del contenedor Docker también aparecerá en su pantalla. https://www.x.org/archive/X11R6.8.0/doc/RELNOTES5.html
Al inicializar o arrancar en un contenedor, es posible que vea errores desde la consola (qemu)
de la siguiente forma: ALSA lib blahblahblah: (function name) returned error: no such file or directory
. Estos son más o menos esperados. Siempre que pueda iniciar el contenedor y todo esté funcionando, no hay razón para preocuparse por esto.
Ver también: aquí.