У меня angular 8 на стороне клиента, на стороне сервера в качестве узла и mysql в качестве bd
Сервер пытается выполнить поиск / dist в своем контейнере и печатает ошибку:
Ошибка: ENOENT:нет такого файла или каталога, stat '/usr/src/file-manager/dist/file-manager/index.html'
серверное приложение на локальном хосте: 3000
node package.json:
"scripts": {
"start": "node src/index.ts",
"test": "echo \"Error: no test specified\" && exit 1",
"watch-changes": "nodemon --watch 'src/**/*' -e ts,tsx --exec ts-node src/index.ts"
},
angular просто встраивается в папку dist, и я использую один со стороны сервера:
angular package.json:
"scripts": {
"ng": "ng",
"start": "ng serve --host 0.0.0.0",
"build": "ng build",
........
index.ts
app.use(express.static(join(__dirname, '../../file-manager/dist/file-manager')));
app.use(json());
app.use(urlencoded({extended: true}));
app.use('/api', new Router().routes);
app.all('/*', function(req, res, next) {
res.sendFile('index.html', { root: join(__dirname, '../../file-manager/dist/file-manager') });
});
app.use((err, req, res, next) => {
if(err) {
res.status(500).json({message: err.human || 'Internal Server Error'});
return next(err);
}
return next();
});
console.log('PORT IS ', port);
app.listen(port);
\ file-manager.docker \ dev.dockerfile
FROM node:10
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY package.json ./
RUN npm install
COPY . .
EXPOSE 4200
CMD ["npm", "start"]
\ server.docker \ dev. dockerfile
FROM node:10
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "run", "watch-changes"]
Когда попробуйте docker-compose и после docker-compose:
version: '3'
services:
client:
build:
context: ./file-manager
dockerfile: .docker/dev.dockerfile
image: file-manager-client-dev
container_name: file-manager-client-dev
ports:
- "4000:4200"
volumes:
- ./file-manager/src:/usr/src/app/src
server:
build:
context: ./server
dockerfile: .docker/dev.dockerfile
image: file-manager-server-dev
container_name: file-manager-server-dev
ports:
- "8000:3000"
external_links:
- client
depends_on:
- mysql
mysql: # name of the third service
build:
context: ./mysql
dockerfile: .docker/dev.dockerfile
container_name: mysql-container
restart: always
ports:
- "3306:3306"
и введите http://localhost:8000/ Я вижу
{"message": "Внутренняя ошибка сервера"}
на белой странице браузера
Когда я 'ng build' и 'npm запускаю watch-change' отдельно, все работает
docker-compose ps
file-manager-client-dev docker-entrypoint.sh npm start Up 0.0.0.0:4000->4200/tcp
file-manager-server-dev docker-entrypoint.sh npm r ... Up 0.0.0.0:8000->3000/tcp
mysql-container docker-entrypoint.sh mysqld Up 0.0.0.0:3306->3306/tcp, 33060/tcp
изображения докера
REPOSITORY TAG IMAGE ID CREATED SIZE
file-manager-client-dev latest 24d9f5c92c12 17 minutes ago 1.51GB
file-manager-server-dev latest 02b5dd9cac83 25 minutes ago 1.03GB
angular-8-file-manager_mysql latest 4191cb9d3c3f 26 minutes ago 437MB
node 10 a68faf70e589 4 days ago 904MB
node latest 977e59b234b7 4 days ago 908MB
mysql 5 cd3ed0dfff7e 5 days ago 437MB
журналы
журналы докера-контейнера file-manager-server-dev
[nodemon] 1.19.1
[nodemon] to restart at any time, enter `rs`
[nodemon] watching: src/**/*
[nodemon] starting `ts-node src/index.ts`
Error: ENOENT: no such file or directory, stat '/usr/src/file-manager/dist/file-manager/index.html'
Error: ENOENT: no such file or directory, stat '/usr/src/file-manager/dist/file-manager/index.html'
docker пытается найти index.html в образе file-manager-server-dev, но нужно искать в file-manager-client-dev, как его указать? Помогите пожалуйста