Ошибка инициализации режима Vault dev от имени пользователя без полномочий root в контейнере alpine: /dev/null/.vault не каталог

Название как бы подводит итог. Dockerfile находится ниже. Других ошибок в сборке у меня нет. Команда docker run выводит Error initializing, показанный ниже, когда я устанавливаю пользователя в хранилище перед ENTRYPOINT.

  • Если я закомментирую USER vault, сервер запускается без ошибок.
  • Если я удалю параметр -dev на vault server, но оставлю USER vault, сервер запустится без ошибок.

Что он ищет в / dev / null или почему ищет там? Я не могу найти никаких ссылок на / dev / null в любом связанном поиске в Google.

> docker build -t vault-deploy .
> docker run --rm -it --cap-add=IPC_LOCK -p 127.0.0.1:8200:8200 vault-deploy



         Api Address: http://0.0.0.0:8200
                 Cgo: enabled
     Cluster Address: https://0.0.0.0:8201
          Listener 1: tcp (addr: "0.0.0.0:8200", cluster address: "0.0.0.0:8201", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
           Log Level: trace
               Mlock: supported: true, enabled: false
             Storage: file
             Version: Vault v0.11.0

Error initializing Dev mode: open /dev/null/.vault: not a directory


vault-dev-config.hcl:

storage "file" {
  path = "/var/vault/data"
  }

(Я получаю такое же поведение, если использую storage "inmem" {} или просто позволяю ему использовать конфигурацию по умолчанию.)


Dockerfile:

FROM [INTERNAL DOCKER IMAGE REPOSITORY]/alpine-python3

# Vault is in the testing repository, edge branch.
RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

# - - - - - - - - - - - - - - - - - - - - - - - -
# Container packages.
# libcap: For the setcap executable.
# - - - - - - - - - - - - - - - - - - - - - - - -
RUN apk update \
    && apk --no-cache add -u vault \
    && apk add --update libcap \
    && rm -rf /var/cache/apk/*


# - - - - - - - - - - - - - - - - - - - - - - - -
# Execution configuration.
# - - - - - - - - - - - - - - - - - - - - - - - -
# We won't run as root.
RUN mv /usr/sbin/vault /usr/bin
RUN chown vault /usr/bin/vault

# Make sure the vault executable can run mlock to prevent swapping to disk. We
# also have to run the container with --cap-add=IPC_LOCK.
RUN setcap cap_ipc_lock=+ep $(readlink -f /usr/bin/vault)

# - - - - - - - - - - - - - - - - - - - - - - - -
# Create and set ownership of /var/vault.
# Only needed if we're putting a file storage back end here.
# - - - - - - - - - - - - - - - - - - - - - - - -
RUN mkdir /var/vault
RUN chown -R vault:vault /var/vault

# - - - - - - - - - - - - - - - - - - - - - - - -
# Create, populate and set ownership of /etc/vault.
# - - - - - - - - - - - - - - - - - - - - - - - -
RUN mkdir /etc/vault

COPY vault-dev-config.hcl /etc/vault/vault-dev-config.hcl
RUN chmod 600 /etc/vault/vault-dev-config.hcl

RUN chown -R vault:vault /etc/vault

# - - - - - - - - - - - - - - - - - - - - - - - -
# Prepare for launch.
# - - - - - - - - - - - - - - - - - - - - - - - -
USER vault
#Error initializing Dev mode: open /dev/null/.vault: not a directory

ENTRYPOINT vault server \
    -dev \
    -log-level trace \
    -dev-listen-address 0.0.0.0:8200 \
    -config /etc/vault/vault-dev-config.hcl

person Scott    schedule 18.10.2018    source источник


Ответы (1)


Люблю ответ на группу Google Убежища. В режиме разработки Vault записывает корневой ключ в $HOME/.vault. В моем контейнере у пользователя хранилища нет логина или $HOME, поэтому $HOME по умолчанию /dev/null. Установка $HOME на /var/vault решила проблему.

person Scott    schedule 24.10.2018