| set -e -o pipefail | |
| ### Container entrypoint | |
| # Runs the CMD as defined by the Dockerfile or passed to `docker run` | |
| # Can be used to configure the runtime dir | |
| # Bypass by using ENTRYPOINT or `--entrypoint` | |
| ### Set INVOKEAI_ROOT pointing to a valid runtime directory | |
| # Otherwise configure the runtime dir first. | |
| ### Set the CONTAINER_UID envvar to match your user. | |
| # Ensures files created in the container are owned by you: | |
| # docker run --rm -it -v /some/path:/invokeai -e CONTAINER_UID=$(id -u) <this image> | |
| # Default UID: 1000 chosen due to popularity on Linux systems. Possibly 501 on MacOS. | |
| USER_ID=${CONTAINER_UID:-1000} | |
| USER=ubuntu | |
| usermod -u ${USER_ID} ${USER} 1>/dev/null | |
| ### Set the $PUBLIC_KEY env var to enable SSH access. | |
| # We do not install openssh-server in the image by default to avoid bloat. | |
| # but it is useful to have the full SSH server e.g. on Runpod. | |
| # (use SCP to copy files to/from the image, etc) | |
| if [[ -v "PUBLIC_KEY" ]] && [[ ! -d "${HOME}/.ssh" ]]; then | |
| apt-get update | |
| apt-get install -y openssh-server | |
| pushd "$HOME" | |
| mkdir -p .ssh | |
| echo "${PUBLIC_KEY}" >.ssh/authorized_keys | |
| chmod -R 700 .ssh | |
| popd | |
| service ssh start | |
| fi | |
| mkdir -p "${INVOKEAI_ROOT}" | |
| chown --recursive ${USER} "${INVOKEAI_ROOT}" || true | |
| cd "${INVOKEAI_ROOT}" | |
| # Run the CMD as the Container User (not root). | |
| exec gosu ${USER} "$@" | |