I am having three issues:
very similar to How to solve Node.js Error: Cannot find Module?, but mine can't find node at all it seems.
when updating either docker-compose.yml or the logic, running
docker compose
with or without the--build
flag does not detect changes and update the image and I'm running stale broken imageseven when specifying the dependency order with
depends_on
, my node server builds and tries to connect to my postgres server before it is ready.the server container cannot seem to communicate with my postgresql container, although I can communicate with both from my local environment by running
psql postgres://postgres:postgres@localhost:5432/postgres
(postgres) orcurl localhost:8080/foo
(server)
docker-practice_server_1 | error: Error: connect ECONNREFUSED 127.0.0.1:5432
docker-practice_server_1 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1146:16) {
docker-practice_server_1 | errno: -111,
docker-practice_server_1 | code: 'ECONNREFUSED',
docker-practice_server_1 | syscall: 'connect',
docker-practice_server_1 | address: '127.0.0.1',
docker-practice_server_1 | port: 5432
docker-practice_server_1 | }
Any help on resolving any of these errors is much appreciated.
Error
docker-practice_server_1 | node:internal/modules/cjs/loader:926
docker-practice_server_1 | throw err;
docker-practice_server_1 | ^
docker-practice_server_1 | Error: Cannot find module '/node index'
docker-practice_server_1 | at Function.Module._resolveFilename (node:internal/modules/cjs/loader:923:15)
docker-practice_server_1 | at Function.Module._load (node:internal/modules/cjs/loader:768:27)
docker-practice_server_1 | at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:76:12)
docker-practice_server_1 | at node:internal/main/run_main_module:17:47 {
docker-practice_server_1 | code: 'MODULE_NOT_FOUND',
docker-practice_server_1 | requireStack: []
docker-practice_server_1 | }
project structure
--- docker-compose.yml
--- server
----- index.js
----- package.json
----- Dockerfile
index.js
const express = require("express");
const app = express();
const pgp = require("pg-promise")();
const db = pgp("postgres://postgres:postgres@localhost:5432/postgres")
.connect()
.then(() => console.log("connected!"))
.catch((err) => console.error("failed to connect because: ", err));
app.get("/foo", (req, res) => {
res.send("sup");
db.any("select * from sups")
.then((v) => console.log("got: ", v))
.catch((err) => console.error("error: ", err));
});
app.listen(8080, () => console.log("listening on 8080"));
docker-compose.yml
services:
db:
image: postgres
environment:
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- 5432:5432
server:
depends_on:
- db
build:
context: ./server
dockerfile: Dockerfile
ports:
- 8080:8080
Dockerfile
FROM node:14
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm i
COPY . .
EXPOSE 8080
CMD [ "node", "index.js" ]