【发布时间】: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