【发布时间】:2018-04-18 17:47:28
【问题描述】:
我正在使用 docker 和 knex 构建节点/快速服务以进行数据库交互。我有一个定义了一些环境变量的env_file(在 docker-compose 文件中定义)。应用程序正在正确读取它们,因为 console.log(process.env.DATABASE_USER); 将记录正确的值。
我按照 knex 文档设置了一个如下所示的 knexfile:
module.exports = {
development: {
client: 'pg',
connection: {
host: process.env.DATABASE_HOST,
port: process.env.DATABASE_PORT,
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME_DEV,
},
migrations: {
directory: __dirname + '/db/migrations',
},
seeds: {
directory: __dirname + '/db/seeds',
},
},
};
如果我将值硬编码到 knexfile 中,一切都很好。我可以连接到数据库,运行迁移等。
当我使用我的环境变量(如上)时,它们返回未定义。这是为什么呢?
更新:
我的 docker compose 文件--api.env 只是一个基本的 .env 文件:
version: '3.3'
services:
db:
container_name: db
build:
context: ./services/api/src/db
dockerfile: Dockerfile
ports:
- 5435:5432
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
nginx:
container_name: nginx
build: ./services/nginx
restart: always
ports:
- 80:80
depends_on:
- api
links:
- api
api:
container_name: api
build:
context: ./services/api
dockerfile: Dockerfile
volumes:
- './services/api:/usr/src/app'
- './services/api/package.json:/usr/src/app/package.json'
ports:
- 8887:8888
env_file: ./api.env
depends_on:
- db
links:
- db
client:
container_name: client
build:
context: ./services/client
dockerfile: Dockerfile
volumes:
- './services/client:/usr/src/app'
ports:
- 3007:3000
environment:
- NODE_ENV=development
depends_on:
- api
links:
- api
api服务的Dockerfile:
FROM node:latest
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
ENV PATH /usr/src/app/node_modules/.bin:$PATH
ADD package.json /usr/src/app/package.json
RUN npm install
CMD ["npm", "start"]
【问题讨论】:
-
您如何运行 knex 迁移?它没有显示在 docker compose 中。
标签: node.js docker migration command-line-interface knex.js