{"meta":{"title":"Soporte de Dockerfile para GitHub Actions","intro":"Cuando creas un Dockerfile para una acción de un contenedor de Docker, debes ser consciente de cómo interactúan algunas instrucciones de Docker con GitHub Actions y con el archivo de metadatos de la acción.","product":"GitHub Actions","breadcrumbs":[{"href":"/es/actions","title":"GitHub Actions"},{"href":"/es/actions/reference","title":"Referencia"},{"href":"/es/actions/reference/workflows-and-actions","title":"Flujos de trabajo y acciones"},{"href":"/es/actions/reference/workflows-and-actions/dockerfile-support","title":"Soporte para Dockerfile"}],"documentType":"article"},"body":"# Soporte de Dockerfile para GitHub Actions\n\nCuando creas un Dockerfile para una acción de un contenedor de Docker, debes ser consciente de cómo interactúan algunas instrucciones de Docker con GitHub Actions y con el archivo de metadatos de la acción.\n\n### USUARIO\n\nLas acciones de Docker deben ejecutarse mediante el usuario predeterminado de Docker (root). No uses la instrucción `USER` en `Dockerfile`, porque no podrás acceder al directorio `GITHUB_WORKSPACE`. Para obtener más información, consulta [Referencia de variables](/es/actions/reference/variables-reference#default-environment-variables) y [referencia USER](https://docs.docker.com/engine/reference/builder/#user) en la documentación de Docker.\n\n### FROM\n\nLa primera instrucción de `Dockerfile` debe ser `FROM`, que selecciona una imagen base de Docker. Para obtener más información, vea la [referencia FROM](https://docs.docker.com/engine/reference/builder/#from) en la documentación de Docker.\n\nEstos son algunos procedimientos recomendados al establecer el argumento `FROM`:\n\n* Se recomienda utilizar imágenes oficiales de Docker. Por ejemplo, `python` o `ruby`.\n* Utiliza una etiqueta de versión si es que existe, preferentemente con una versión mayor. Por ejemplo, use `node:10` en lugar de `node:latest`.\n* Se recomienda usar imágenes de Docker basadas en el sistema operativo [Debian](https://www.debian.org/).\n\n### WORKDIR\n\nGitHub establece la ruta de acceso del directorio de trabajo en la variable de entorno `GITHUB_WORKSPACE`. Se recomienda no usar la instrucción `WORKDIR` en `Dockerfile`. Antes de que se ejecute la acción, GitHub montará el directorio `GITHUB_WORKSPACE` sobre todo lo que estuviera en esa ubicación en la imagen de Docker y se establecerá `GITHUB_WORKSPACE` como directorio de trabajo. Para obtener más información, consulta [Referencia de variables](/es/actions/reference/variables-reference#default-environment-variables) y la [referencia WORKDIR](https://docs.docker.com/engine/reference/builder/#workdir) en la documentación de Docker.\n\n### Punto de entrada\n\nSi define `entrypoint` en el archivo de metadatos de una acción, invalidará el elemento `ENTRYPOINT` definido en `Dockerfile`. Para más información, consulta [Guía de referencia de la sintaxis de metadatos](/es/actions/creating-actions/metadata-syntax-for-github-actions#runsentrypoint).\n\nLa instrucción `ENTRYPOINT` de Docker tiene un formato *shell* y otro *exec*. En la documentación `ENTRYPOINT` de Docker se recomienda usar el formato *exec* de la instrucción `ENTRYPOINT`. Para obtener más información sobre los formatos *exec* y *shell*, vea la [referencia ENTRYPOINT](https://docs.docker.com/engine/reference/builder/#entrypoint) en la documentación de Docker.\n\nNo debe usar `WORKDIR` para especificar su punto de entrada en el Dockerfile. En vez de esto, deberías utilizar una ruta absoluta. Para obtener más información, vea [WORKDIR](#workdir).\n\nSi configura el contenedor para usar el formato *exec* de la instrucción `ENTRYPOINT`, el elemento `args` configurado en el archivo de metadatos de la acción no se ejecutará en un shell de comandos. Si el elemento `args` de la acción contiene una variable de entorno, esta no se sustituirá. Por ejemplo, el uso del siguiente formato *exec* no imprimirá el valor almacenado en `$GITHUB_SHA`, sino que en su lugar imprimirá `\"$GITHUB_SHA\"`.\n\n```dockerfile\nENTRYPOINT [\"echo $GITHUB_SHA\"]\n```\n\nSi quiere la sustitución de variables, puede utilizar el formato *shell* o ejecutar un shell directamente. Por ejemplo, con el siguiente formato *exec*, puede ejecutar un shell para imprimir el valor almacenado en la variable de entorno `GITHUB_SHA`.\n\n```dockerfile\nENTRYPOINT [\"sh\", \"-c\", \"echo $GITHUB_SHA\"]\n```\n\nPara proporcionar `args` definidos en el archivo de metadatos de la acción a un contenedor de Docker que use el formato *exec* en `ENTRYPOINT`, se recomienda crear un script de shell denominado `entrypoint.sh` que llame desde la instrucción `ENTRYPOINT`:\n\n####\n\n```\n          _Dockerfile_ de ejemplo\n```\n\n```dockerfile\n# Container image that runs your code\nFROM debian:9.5-slim\n\n# Copies your code file from your action repository to the filesystem path `/` of the container\nCOPY entrypoint.sh /entrypoint.sh\n\n# Executes `entrypoint.sh` when the Docker container starts up\nENTRYPOINT [\"/entrypoint.sh\"]\n```\n\n#### Archivo *entrypoint.sh* de ejemplo\n\nCon el Dockerfile de ejemplo anterior, GitHub enviará el elemento `args` configurado en el archivo de metadatos de la acción como argumentos a `entrypoint.sh`. Agregue el elemento `#!/bin/sh`[shebang](https://en.wikipedia.org/wiki/Shebang_\\(Unix\\)) en la parte superior del archivo `entrypoint.sh` para usar explícitamente el shell compatible con [POSIX](https://en.wikipedia.org/wiki/POSIX) del sistema.\n\n```shell\n#!/bin/sh\n\n# `$#` expands to the number of arguments and `$@` expands to the supplied `args`\nprintf '%d args:' \"$#\"\nprintf \" '%s'\" \"$@\"\nprintf '\\n'\n```\n\nTu código debe ser ejecutable. Asegúrese de que el archivo `entrypoint.sh` tiene permisos `execute` antes de usarlo en un flujo de trabajo. Puedes modificar los permisos de tu terminal si utilizas este comando:\n\n```shell\nchmod +x entrypoint.sh\n```\n\nCuando un script de shell `ENTRYPOINT` no sea ejecutable, recibirá un error similar al siguiente:\n\n```shell\nError response from daemon: OCI runtime create failed: container_linux.go:348: starting container process caused \"exec: \\\"/entrypoint.sh\\\": permission denied\": unknown\n```\n\n### CMD\n\nSi define `args` en el archivo de metadatos de la acción, `args` invalidará la instrucción `CMD` especificada en `Dockerfile`. Para más información, consulta [Guía de referencia de la sintaxis de metadatos](/es/actions/creating-actions/metadata-syntax-for-github-actions#runsargs).\n\nSi usa `CMD` en `Dockerfile`, siga estas instrucciones:\n\n1. En el documento se necesitaban argumentos en el archivo Léame de la acción y omitirlos de la instrucción `CMD`.\n2. Use los valores predeterminados que permiten usar la acción sin especificar `args`.\n3. Si la acción expone una marca `--help`, o algo similar, úselo para que la acción se documente de forma automática.\n\n## Capacidades de Linux compatibles\n\nGitHub Actions es compatible con las capacidades predeterminadas de Linux que acepta Docker. Estas capacidades no se pueden añadir ni eliminar. Para obtener más información acerca de las capacidades predeterminadas de Linux compatibles con Docker, consulta [Capacidades de Linux y kernel](https://docs.docker.com/engine/security/#linux-kernel-capabilities) en la documentación de Docker. Para obtener más información sobre las capacidades de Linux, consulta [Información general sobre las capacidades de Linux](http://man7.org/linux/man-pages/man7/capabilities.7.html) en las páginas man de Linux."}