以非root用户身份在高山容器中进行的Vault dev模式初始化错误:/dev/null/.vault不是目录

时间:2018-10-18 03:46:30

标签: docker alpine hashicorp-vault

标题归纳起来。 Dockerfile在下面。我在构建中没有其他错误。当我将用户设置为Error initializing之前的Vault时,docker run命令吐出下面显示的ENTRYPOINT

  • 如果我将USER vault注释掉,服务器将启动而没有错误。
  • 如果我删除了vault server的-dev选项,但离开了USER vault,则服务器启动时没有错误。

在/ dev / null中寻找什么,或者为什么在那里寻找呢?我无法在任何相关的Google搜索中打开对/ dev / null的引用。

> 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

1 个答案:

答案 0 :(得分:0)

在Vault Google组上提供答案。在开发模式下,保险柜将根密钥写入$HOME/.vault。在我的容器中,保险库用户没有登录名或$HOME,因此$HOME默认为/dev/null。将$HOME设置为/var/vault可以解决此问题。