Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailem [Docker] komunikácia kontajnerov front-end - back-end nefunguje

Dobrý deň,

vytváram jednoduchu web. multikontajnerovu aplikáciu za pouzitia Docker Desktop. Celkovo je tvorená 4 kontajnermi:

- noSQL databaza MongoDb
- MongoDB admin rozhranie na zobrazenie obsahu databazy z nazvom mongo-express
- backend v Node.js (server vytvorený v Express.js) na komunikáciu z databazou a frontendom (používa vlastný obraz vytvorený cez Dockerfile založený na node)
- frontend je statická web. stránka HTML/CSS + Vanilla JS (používa vlastný obraz vytvorený cez Dockerfile založený na nginx)

všetky kontajneri sú v spoločnej sieti todo-net, problém je, že komunikácia medzi backendom a frontendom nefunguje. Porty vyzeraju nasledovne:

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9275ff88b217 todo-nginx "/docker-entrypoint.…" About a minute ago Up About a minute 0.0.0.0:3000->80/tcp todo-client
569837f97ded todo-node "docker-entrypoint.s…" 2 minutes ago Up 2 minutes 5000/tcp todo-server
92d1bcc3c6b2 mongo-express "tini -- /docker-ent…" 2 hours ago Up 2 hours 0.0.0.0:8081->8081/tcp mongodb-ui
6c327048c0c8 mongo "docker-entrypoint.s…" 2 hours ago Up 2 hours 27017/tcp mongodb

komunikácia medzi databazou a backendom, alebo databazou a mongo-express tiež funguje, t.j. že cez toho admin klienta vidím dáta, kt. sú v databáze. Problémové kontajneri spusťam príkazmi:

docker build -t todo-node .
docker run --name todo-server --network todo-net --rm -d todo-node
docker build -t todo-nginx .
docker run --name todo-client -p 3000:80 --network todo-net --rm -d todo-nginx

Kod v express.js vyzerá nasledovne:

const express = require('express');
const cors = require('cors');

const app = express();

app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(cors());

app.get('/todos', (req, res) => {
  ... // toto odosiela data na front-end
})

const PORT = process.env.PORT || 5000;
app.listen(PORT, () => console.log(`Server is running on port ${PORT}...`));

jeho Dockerfile:

FROM node
WORKDIR /app
COPY package.json .
RUN npm install
COPY . .
EXPOSE 5000
CMD ["node", "server.js"]

na front-ende sa dáta volajú cez fetch:

fetch("http://todo-server:5000/todos").then(res => res.json()).then(data => console.log(data))

// chyba! (vid. screen z konzole)

Odpověď na otázku

1 Zadajte svou přezdívku:
2 Napište svou odpověď:
3 Pokud chcete dostat ban, zadejte libovolný text:

Zpět do poradny