简体   繁体   English

Docker:运行脚本:错误:无法锁定数据库:权限被拒绝

[英]Docker: run script : ERROR: Unable to lock database: Permission denied

Hello I'm trying to run a script to just start my yarn dev after my postgres is connected:您好,我正在尝试运行一个脚本来在我的 postgres 连接后启动我的纱线开发:

until psql -c '\l'; do
  echo >&2 "$(date +%Y%m%dt%H%M%S) Postgres is unavailable - sleeping"
  sleep 1
done
echo >&2 "$(date +%Y%m%dt%H%M%S) Postgres is up - executing command"

exec ${@}

docker file: docker 文件:

    #building code
    FROM node:lts-alpine

    RUN mkdir -p /home/node/api && chown -R node:node /home/node/api

    WORKDIR /home/node/api

    COPY ormconfig.json .env package.json yarn.* ./

    USER node

    RUN yarn

    COPY --chown=node:node . .

    RUN apk add --no-cache openssl

    COPY wait-pg.sh ./
    RUN chmod +x /wait-pg.sh
    ENTRYPOINT ["/wait-pg.sh"]

    EXPOSE 4000

    CMD ["yarn", "dev"]

docker compose: docker 组成:

version: '3.7'
services:
  db-pg:
    image: postgres:12
    container_name: db-pg
    ports:
      - '${DB_PORT}:5432'
    environment:
      ALLOW_EMPTY_PASSWORD: 'no'
      POSTGRES_USER: ${DB_USER}
      POSTGRES_PASSWORD: ${DB_PASS}
      POSTGRES_DB: ${DB_NAME}
    volumes:
      - ci-postgres-data:/data

  ci-api:
    build: .
    container_name: ci-api
    volumes:
      - .:/home/node/api
      - /home/node/api/node_modules
    ports:
      - '${SERVER_PORT}:${SERVER_PORT}'
    depends_on:
      - db-pg
    command: ['./wait-pg.sh', 'yarn', 'dev']
    logging:
      driver: 'json-file'
      options:
        max-size: '10m'
        max-file: '5'

volumes:
  ci-postgres-data:

and get this error:并得到这个错误:

---> Running in c5add5098b70 ERROR: Unable to lock database: Permission denied ERROR: Failed to open apk database: Permission denied ERROR: Service 'ci-api' failed to build: The command '/bin/sh -c apk add --no-cache openssl' returned a non-zero code: 99 --->在c5add5098b70中运行错误:无法锁定数据库:权限被拒绝错误:无法打开apk数据库:权限被拒绝错误:服务'ci-api'未能构建:命令'/bin/sh -c apk add - -no-cache openssl' 返回一个非零代码:99

You are getting the error because the node user you are trying to use does not have permissions to run the command.您收到错误是因为您尝试使用的节点用户没有运行该命令的权限。 Move the user definition to after the commands, something like this:将用户定义移动到命令之后,如下所示:

  #building code
    FROM node:lts-alpine

    RUN mkdir -p /home/node/api && chown -R node:node /home/node/api
    WORKDIR /home/node/api
    COPY ormconfig.json .env package.json yarn.* ./

    RUN yarn
    COPY --chown=node:node . .
    RUN apk add --no-cache openssl
    COPY wait-pg.sh .
    RUN chmod +x ./wait-pg.sh

    USER node



    ENTRYPOINT ["./wait-pg.sh"]
    EXPOSE 4000
    CMD ["yarn", "dev"]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM