我有一个在本地机器上运行的基于Node的CRUD应用程序。它在Node上运行,使用Postgres作为数据库,使用Knex.js作为查询构建器等等。
我创建了一个Docker文件和一个docker-compose文件,容器已经启动,但是Node容器无法访问Postgres容器。我怀疑这与环境变量有关,但我不确定。以下是我的Docker文件:
FROM node:12
# Create app directory
WORKDIR /usr/src/app
# Install app dependencies
# A wildcard is used to ensure both package.json AND package-lock.json are copied
# where available (npm@5+)
COPY package*.json ./
RUN npm ci --only=production
# Bundle app source
COPY . .
ENV PORT=8080
EXPOSE 8080
CMD [ "npm", "start" ]
这是docker-compose文件的内容:
version: '2'
services:
postgres:
image: postgres:alpine
environment:
POSTGRES_PASSWORD: password
POSTGRES_USER: app
POSTGRES_DB: db
app:
build: .
depends_on:
- "postgres"
links:
- "postgres"
environment:
DB_PASSWORD: 'password'
DB_USER: 'app'
DB_NAME: 'db'
DB_HOST: 'postgres'
PORT: 8080
ports:
- '8080:8080'
command: npm start
此外,在根目录下还有一个 knex.js
文件,根据环境处理数据库连接:
// Update with your config settings.
module.exports = {
development: {
client: 'pg',
connection: 'postgres://localhost/db'
},
test: {
client: 'pg',
connection: 'postgres://localhost/test-db'
}
};
此外,当我在Docker内部检查节点应用程序的hosts文件时,我没有看到任何提及与Postgres容器链接的内容。非常感谢您的帮助。谢谢。
docker-compose build
然后docker-compose down; docker-compose up -d
,这样应该会更新新文件。你可以通过docker-compose exec app cat /path/to/knex.js
来验证是否已经进行了编辑。是的,只要你成功建立了连接,迁移应该可以工作。话虽如此,我没有看到你在连接字符串中传递任何凭据,所以可能需要先修复这个问题。 - leeman24docker-compose
文件中传递凭据吗? - jdix87connection: 'postgres://app:password@postgres/db'
。现在我需要弄清楚如何在我的docker-compose中添加第二个测试数据库。 - jdix87