node.js - Cloud Run Build 期间未定义环境变量
问题描述
我使用 Google Cloud Run 将 node.js 应用程序容器化。我按照本指南将环境变量添加到谷歌云运行,并希望在我的应用程序代码中使用它们。但。每当我运行构建(云运行构建)时,它都会向我显示process.env.NODE_ENV
其他环境变量是undefined
.
你能帮我找到问题的根本问题吗?
Dockerfile
FROM node:14.16.0
WORKDIR /usr/src/app
COPY package.json yarn.lock ./
# Copy local code to the container image.
COPY . ./
RUN yarn install
RUN yarn build
RUN npx knex --knexfile=./src/infrastructure/knex/knex.config.ts migrate:latest --env production
# Use the official lightweight Node.js 14 image.
# https://hub.docker.com/_/node
FROM node:14.16.0
# Create and change to the app directory.
WORKDIR /usr/src/app
# Copy application dependency manifests to the container image.
# Copying this first prevents re-running npm install on every code change.
COPY package.json yarn.lock ./
# Install production dependencies.
# If you add a package-lock.json, speed your build by switching to 'npm ci'.
# RUN npm ci --only=production
RUN yarn install --production --frozen-lockfile
COPY --from=0 /usr/src/app/dist ./dist
EXPOSE 8080
# Run the web service on container startup.
CMD [ "yarn", "prod" ]
这行代码抛出错误
RUN npx knex --knexfile=./src/infrastructure/knex/knex.config.ts migrate:latest --env production
这是knex.config.ts
import 'dotenv/config'
import { Knex } from 'knex'
import { envConfig, NodeEnvEnum } from '../../configs/env.config'
console.log('ASDASD', process.env.NODE_ENV, envConfig.environment, process.env.CLOUD_SQL_CONNECTION_NAME, envConfig.databaseCloudSqlConnection)
export const knexConfig: Record<NodeEnvEnum, Knex.Config> = {
[NodeEnvEnum.Development]: {
client: 'pg',
connection: envConfig.databaseUrl,
migrations: {
extension: 'ts'
}
},
[NodeEnvEnum.Production]: {
client: 'pg',
connection: {
database: envConfig.databaseName,
user: envConfig.databaseUser,
password: envConfig.databasePassword,
host: `/cloudsql/${envConfig.databaseCloudSqlConnection}`
}
}
}
export default knexConfig
这是env.config.ts
export enum NodeEnvEnum {
Production = 'production',
Development = 'development'
}
interface EnvConfig {
serverPort: string
environment: NodeEnvEnum
// Database
databaseCloudSqlConnection: string
databaseUrl: string
databaseUser: string
databasePassword: string
databaseName: string
}
export const envConfig: EnvConfig = {
serverPort: process.env.SERVER_PORT as string,
environment: process.env.NODE_ENV as NodeEnvEnum,
// Database
databaseUrl: process.env.DATABASE_URL as string,
databaseCloudSqlConnection: process.env.CLOUD_SQL_CONNECTION_NAME as string,
databaseName: process.env.DB_NAME as string,
databaseUser: process.env.DB_USER as string,
databasePassword: process.env.DB_PASSWORD as string
}
Cloud Run 日志中的错误示例
解决方案
推荐阅读
- css - 模糊“周围”文字
- php - php pdo update query not working properly
- jestjs - Use Jest expectations over the Detox custom ones
- php - PHP - Set boolean in function doesn't work
- python - Wagtail CMS not rendering navigation icons/images
- c - Issue when using pointer to line tokens in C
- python - MatplotlibDeprecationWarning: The rowNum and colNum attribute was deprecated in Matplotlib 3.2
- salesforce - Salesforce: How to automate report extraction as JSON/CSV
- mysql - mySQL 查询以查找与所有对象相关的对象。无聚合操作
- javascript - How can I pass data from component and use the data in a method?