Con Docker lanzando la versión 19.03.0, el lanzador de Discourse ahora falla al iniciar la instancia después de reconstruirla, mostrando el siguiente mensaje:
/usr/bin/docker: --network no es una dirección MAC válida.
Consulte '/usr/bin/docker run --help'.
Este es el comando ejecutado (algunos elementos modificados por seguridad):
Lo estoy utilizando detrás de un proxy inverso (que se ejecuta en la red llamada reverse-proxy). Siempre ha funcionado, hasta hoy. Parece que espera un valor de dirección MAC que no se está proporcionando.
Tenga en cuenta que --mac-address aparece y está poblado, pero la línea --network es específica de su configuración y se desvía de una instalación estándar independiente de Discourse.
@codinghorror Todo eso está muy bien y es genial, pero si las instalaciones independientes estándar son la única forma en que se supone que debe funcionar Discourse, ¿por qué ofrecer soporte para la configuración de contenedores yml en ./containers e incluir ejemplos de esto en ./samples? El archivo que utilicé está completamente comentado con instrucciones de operación, específicamente esta sección:
# ¿algún argumento extra para Docker?
# docker_args:
Lo único que estoy usando es:
docker_args: "--network reverse-proxy"
Lo cual, una vez más, ha funcionado perfectamente durante un año. Así que, obviamente, algo ha cambiado. Por favor, entienda que no estoy tratando de ser confrontativo (sería un poco absurdo, ya que estoy pidiendo ayuda), pero sí estoy tratando de hacer ver que estoy utilizando opciones que están disponibles a través de las muestras de Discourse.
Quizás, si entendiera cómo se genera esa dirección MAC, podría indicarme un problema de cambio de entorno; eso es lo que espero.
Veo esto en el lanzador:
if [ -z "$SKIP_MAC_ADDRESS" ] ; then
mac_address="--mac-address $($docker_path run $user_args -i --rm -a stdout -a stderr $image /bin/sh -c "echo $hostname | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:\1:\2:\3:\4:\5/'")"
fi
Lo analizaré y veré si puedo averiguarlo.
ACTUALIZACIÓN: Y al observar esto, veo que puedo usar --skip-mac-address. Al hacer esto, mi instancia se inicia sin problemas, por lo que parece que el proceso que determina la dirección MAC es el problema.
Así que, en resumen. La operación de compilación tiene éxito sin importar qué, pero en la operación de compilación (./launcher rebuild myinstance), el último paso de iniciar el contenedor falla debido a que la dirección MAC de alguna manera no se establece.
Sin embargo, simplemente puedo ejecutar ./launcher start myinstance después de eso y luego se inicia sin problemas, y la dirección MAC también está presente. Es extraño, eso es todo.
Tengo el mismo problema. @codinghorror Aquí están los pasos para reproducir el error y una pista para corregir esta regresión.
Pasos para reproducir:
Configura en el archivo de configuración de contenedores (app): docker_args: "--network reverse-proxy"
Reconstruye: ./launcher rebuild app
Observa el error: /usr/bin/docker: --network no es una dirección MAC válida
Es un error introducido por el commit bfc79e7 (GitHub - discourse/discourse_docker: A Docker image for Discourse · GitHub). merge_user_args es llamado por set_template_info, pero set_template_info se ejecuta dos veces durante la reconstrucción (run_run y run_bootstrap).
Por lo tanto, en lugar de que user_args sea igual a $user_args $docker_args, obtenemos $user_args $docker_args $docker_args.
Docker no permite configurar la misma red múltiples veces: docker: la red "reverse-proxy" se especifica varias veces.
Gracias por revertir este commit o hacer que merge_user_args sea idempotente.
Con ese parche aplicado y la clave docker_args configurada en la definición del contenedor, el vector de argumentos final de docker run se ve más o menos así: