Как указать, чтобы искать папку клиента / dist в клиентском контейнере, а не на сервере? - PullRequest
0 голосов
/ 23 октября 2019

У меня 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, как его указать? Помогите пожалуйста

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...