【问题标题】:can't execute shell script on centos 8无法在centos 8上执行shell脚本
【发布时间】:2022-01-18 17:59:45
【问题描述】:

我正在从 docker node:17-alpine 运行 sh 脚本。

我收到错误 SyntaxError: Invalid or unexpected token at #wait-for-maria.sh。

我可以知道如何在 docker 上运行脚本吗?

#!/bin/sh
# wait-for-maria.sh

set -e

host="$1"
shift

until PGPASSWORD=$MARIA_PASSWORD psql -h "$host" -U "root" -c '\q'; do
  >&2 echo "Maria is unavailable - sleeping"
  sleep 1
done

>&2 echo "Maria is up - executing command"
exec "$@"

码头工人撰写

version: "3.7"
services:
  db:
    container_name: myimage-db
    image: asia.gcr.io/imagecontainer/myimage/db
    restart: always
    volumes:
      - ./db/data/:/var/lib/mariadb/data
    environment:
      MARIADB_ROOT_PASSWORD: xxx
      MARIADB_DATABASE: mydb
    expose:
      - 3306
    ports:
      - "3307:3306"
    networks:
      - gita

  data_api:
    container_name: myimage-data-api
    image: asia.gcr.io/imagecontainer/myimage/data-api
    expose:
      - 4000
    ports:
      - "4000:4000"
    depends_on:
      - db
    command: ["./wait-for-maria.sh", "db:3306", "--", "python", 
"app.py"]

    environment:
      DATABASE_URL: mysql://root:xxx@db:3306/mydb
      ACCESS_TOKEN_SECRET: xxx
      REFRESH_TOKEN_SECRET: xx
    networks:
      - gita


networks:
  gita:

Dockerfile

FROM node:17 AS BUILD_IMAGE
WORKDIR /usr/src/app
COPY ["package.json", "yarn.lock", "tsconfig.json", "wait-for- 
maria.sh", "./"]
COPY ["./prisma/schema.prisma", "./prisma/"]
RUN chmod +x ./wait-for-maria.sh
RUN yarn install --no-cache bash
RUN yarn --frozen-lockfile
RUN yarn prisma generate
COPY . .
RUN yarn build
#RUN yarn install --production
RUN yarn autoclean --force

FROM node:17-alpine
ENV NODE_ENV=production
WORKDIR /usr/src/app
COPY --from=BUILD_IMAGE /usr/src/app/dist ./dist
COPY --from=BUILD_IMAGE /usr/src/app/node_modules ./node_modules
COPY --from=BUILD_IMAGE /usr/src/app/prisma ./prisma
COPY --from=BUILD_IMAGE /usr/src/app/package*.json ./
COPY --from=BUILD_IMAGE /usr/src/app/wait-for-maria.sh ./

EXPOSE 4000
#CMD [ "node", "dist/server.js" ]
CMD [  "npm", "run", "start:migrate:prod" ]

【问题讨论】:

  • 确保您的脚本文件中有 Unix 风格的行尾 (CR) 而不是 Windows 风格的 (CRLF)。
  • 这个 SyntaxError: Invalid or unexpected token 看起来像是来自 javascript 的错误,因此它可能与 sh 脚本无关,而是您在 node.js 中执行脚本的方式。你能展示一下node.js代码吗?
  • @Molda 实际上,我从我的主要帖子中更新的 docker-compose 文件运行它。命令:["./wait-for-maria.sh", "db:3306", "--", "python", "app.py"]
  • @HansKilian 是的,我已经检查过了,格式正确。
  • 你能从日志中显示完整的错误信息吗?

标签: node.js docker docker-compose sh


【解决方案1】:

我使用 docker-compose-wait 如下。

添加https://github.com/ufoscout/docker-compose-wait/releases/download/2.5.0/wait /wait 运行 chmod +x /等待 CMD /wait && yarn start:migrate:prod

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2019-01-07
    相关资源
    最近更新 更多