macos - vender - no se puede instalar mac os x en este ordenador
No se pudo conectar con Docker daemon en Mac OS X (3)
Actualización para las versiones de Docker que vienen con Docker.app
La experiencia de Docker en macOS ha mejorado desde que se publicó esta respuesta:
El único requisito previo es que
Docker.app
esté ejecutando. Tenga en cuenta que iniciarlo bajo demanda lleva un tiempo, porque la VM Linux subyacente debe iniciarse.Cualquier shell tiene acceso a la funcionalidad de Docker.
De forma predeterminada, Docker.app
se inicia al iniciar sesión (puede cambiarlo a través de sus preferencias).
Si prefiere iniciar y detener Docker on demand desde la línea de comandos , aquí hay scripts bash
que hacen eso, docker-start
y docker-stop
; colóquelos en cualquier lugar de su $PATH
.
Cuando docker-start
lanza Docker.app
, espera hasta que Docker haya terminado de iniciarse y esté listo.
docker-start
:
#!/usr/bin/env bash
case $1 in
-h|--help)
echo $''usage: docker-start/n/nStarts Docker (Docker.app) on macOS and waits until the Docker environment is initialized.''
exit 0
;;
esac
(( $# )) && { echo "ARGUMENT ERROR: Unexpected argument(s) specified. Use -h for help." >&2; exit 2; }
[[ $(uname) == ''Darwin'' ]] || { echo "This function only runs on macOS." >&2; exit 2; }
echo "-- Starting Docker.app, if necessary..."
open -g -a Docker.app || exit
# Wait for the server to start up, if applicable.
i=0
while ! docker system info &>/dev/null; do
(( i++ == 0 )) && printf %s ''-- Waiting for Docker to finish starting up...'' || printf ''.''
sleep 1
done
(( i )) && printf ''/n''
echo "-- Docker is ready."
docker-stop
:
#!/usr/bin/env bash
case $1 in
-h|--help)
echo $''usage: docker-stop/n/nStops Docker (Docker.app) on macOS.''
exit 0
;;
esac
(( $# )) && { echo "ARGUMENT ERROR: Unexpected argument(s) specified. Use -h for help." >&2; exit 2; }
[[ $(uname) == ''Darwin'' ]] || { echo "This function only runs on macOS." >&2; exit 2; }
echo "-- Quitting Docker.app, if running..."
osascript - <<''EOF'' || exit
tell application "Docker"
if it is running then quit it
end tell
EOF
echo "-- Docker is stopped."
echo "Caveat: Restarting it too quickly can cause errors."
Respuesta original y obsoleta:
La útil respuesta de Kevan Ahlquist muestra qué comandos agregar a tu perfil de Bash ( ~/.bash_profile
) para inicializar automáticamente Docker al abrir un shell interactivo.
Tenga en cuenta que siempre puede inicializar Docker en una nueva pestaña / ventana de shell abriendo application /Applications/Docker/Docker Quickstart Terminal.app
(por ejemplo, a través de Spotlight).
Desde un shell existente, puede invocarlo como open -a ''Docker Quickstart Terminal.app''
(que también abre una nueva pestaña de shell).
Lo que ofrece esta respuesta es una forma conveniente de iniciar Docker en el shell actual .
Agregar las funciones de shell Bash a continuación - docker-start
y docker-stop
- mejora el enfoque de Kevan en los siguientes aspectos:
Puede ejecutar
docker-start
a demanda , sin la sobrecarga de iniciar la máquina virtual al abrir el shell (una vez que la máquina virtual Docker se está ejecutando, la inicialización es mucho más rápida, pero aún lleva una cantidad notable de tiempo).
(Por supuesto, puede optar por invocardocker-start
Docker desde su perfil).Docker
docker-stop
permite detener Docker y limpiar las variables de entorno bajo demanda.Las funciones aseguran que los mensajes de error de Docker no se supriman y pasan los códigos de salida de error de Docker.
Se proporciona información de estado adicional.
Puede pasar un nombre de VM como parámetro; el predeterminado es por
default
.
Ejemplo:
$ docker-start
-- Starting Docker VM ''default'' (`docker-machine start default`; this will take a while)...
Starting "default"...
(default) Check network to re-create if needed...
(default) Waiting for an IP...
Machine "default" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses. You may need to re-run the `docker-machine env` command.
-- Setting DOCKER_* environment variables (`eval "$(docker-machine env default)"`)...
DOCKER_CERT_PATH="/Users/jdoe/.docker/machine/machines/default"
DOCKER_HOST="tcp://192.168.99.100:2376"
DOCKER_MACHINE_NAME="default"
DOCKER_TLS_VERIFY="1"
-- Docker VM ''default'' is running.
$ docker-stop
-- Stopping Docker VM ''default'' (`docker-machine stop default`)...
Stopping "default"...
Machine "default" was stopped.
-- Unsetting DOCKER_* environment variables (DOCKER_CERT_PATH, DOCKER_HOST, DOCKER_MACHINE_NAME, DOCKER_TLS_VERIFY)...
-- Docker VM ''default'' is stopped.
Shell funciona para el inicio y la detención bajo demanda de Docker (colóquelos en, por ejemplo, ~/.bash_profile
para una disponibilidad global en sus capas interactivas).
Nota : Las funciones funcionan en bash
, ksh
y zsh
, pero en ksh
tiene que cambiarles el nombre para no incluir un ''-'' en los nombres de las funciones.
function docker-start {
typeset vm=${1:-default} sts
case $vm in
-h|--help)
echo $''usage: docker-start [<vm>]/n/nEnsures that the specified/default Docker VM is started/nand the environment is initialized.''
return 0
;;
esac
sts=$(docker-machine status "$vm") || return
[[ $sts == ''Running'' ]] && echo "(Docker VM ''$vm'' is already running.)" || {
echo "-- Starting Docker VM ''$vm'' (/`docker-machine start "$vm"/`; this will take a while)...";
docker-machine start "$vm" || return
}
echo "-- Setting DOCKER_* environment variables (/`eval /"/$(docker-machine env "$vm")/"/`)..."
# Note: If the machine hasn''t fully finished starting up yet from a
# previously launched-but-not-waited-for-completion `docker-machine status`,
# the following may output error messages; alas, without signaling failure
# via the exit code. Simply rerun this function to retry.
eval "$(docker-machine env "$vm")" || return
export | grep -o ''DOCKER_.*''
echo "-- Docker VM ''$vm'' is running."
}
function docker-stop {
typeset vm=${1:-default} sts envVarNames fndx
case $vm in
-h|--help)
echo $''usage: docker-stop [<vm>]/n/nEnsures that the specified/default Docker VM is stopped/nand the environment is cleaned up.''
return 0
;;
esac
sts=$(docker-machine status "$vm") || return
[[ $sts == ''Running'' ]] && {
echo "-- Stopping Docker VM ''$vm'' (/`docker-machine stop "$vm"/`)...";
docker-machine stop "$vm" || return
} || echo "(Docker VM ''$vm'' is not running.)"
[[ -n $BASH_VERSION ]] && fndx=3 || fndx=1 # Bash prefixes defs. wit ''declare -x ''
envVarNames=( $(export | awk -v fndx="$fndx" ''$fndx ~ /^DOCKER_/ { sub(/=.*/,"", $fndx); print $fndx }'') )
if [[ -n $envVarNames ]]; then
echo "-- Unsetting DOCKER_* environment variables ($(echo "${envVarNames[@]}" | sed ''s/ /, /g''))..."
unset "${envVarNames[@]}"
else
echo "(No DOCKER_* environment variables to unset.)"
fi
echo "-- Docker VM ''$vm'' is stopped."
}
Me gustaría ejecutar aplicaciones de varios contenedores usando docker-compose
en Mac OS X El Capitan (v10.11.2).
Sin embargo, el comando comando $ docker-compose up
queja de que no se puede conectar al daemon de Docker.
ERROR: no se pudo conectar con el daemon de Docker; es posible que deba ejecutar el
docker-machine start default
.
Solo después de ejecutar $ eval "$(docker-machine env default)"
tengo acceso al comando docker-compose
.
¿Por qué es esto y cómo puedo superar este paso adicional?
Mi caso ayudó: detener + eliminar todos los contenedores Docker (Docker versión 1.13.0-rc4)
docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)
Después de ejecutar este "docker-componer" sin error "ERROR: No se pudo conectar con el daemon de Docker. Es posible que tenga que iniciar Docker para Mac".
Quizás en algunos casos este mensaje de error solo sea causado por otros errores, es decir, problemas de espacio de memoria.
Tengo lo siguiente en mi ~/.bash_profile
así que no tengo que ejecutar el comando env cada vez:
docker-machine start default 2>/dev/null # Hide output if machine is already running
eval `docker-machine env default`