Docker изображение умирает после "Ошибка чтения пакетов связи" - PullRequest
0 голосов
/ 12 марта 2020

В настоящее время я сталкиваюсь с очень странным поведением, которое я не могу понять. Моя установка: микросервис, использующий узел 10.18.1 и knex js v0.20.10, для доступа к БД, которая является mysql 5,7 дБ

Ошибка Для локальных тестов , у меня есть docker -композитный файл, который создает все изображения, включая мой проект. Проблема, которая у меня есть, заключается в том, что каждый раз, когда я пытаюсь получить информацию из БД, образ моего проекта уничтожается. После просмотра журналов я увидел следующее сообщение от mysql:

mysql    | 2020-03-12T00:40:18.457996Z 2 [Note] Aborted connection 2 to db: <DB_NAME> user: 'root' host: '172.18.0.3' (Got an error reading communication packets)

. Мне удалось сузить проблему до следующих частей кода:

async function getUser (condition) {
    console.log('>> here', condition)

    const users = await knexClient(TABLE_NAME).where(condition) //<-- all good here

    const user = users[0]  //<-- still nothing wrong
    console.log('>', user) // <-- i can see the user from the DB
    await sleep(10000)  // <-- It can even wait for 10 s
    return users.pop()  // <-- BOOM! 
    // return null // <-- If i return null, there is no error!?!?!? wtf?
}
```

Вызов функции

async function getByEmail (email) {
      **const user = await getUser({ email })**

      if (user == null) {
        throw applicationErrors.notFoundError('User not found or is not activated')
      }

      return user
  }

В основном проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я пытаюсь вернуть найденного пользователя в БД, я получаю ошибку mysql (ошибка чтения пакетов связи). После возникновения этой ошибки мое docker изображение останавливается, поскольку завершается с кодом состояния 0.

Забавный факт

Когда я запускаю тот же исходный код с тем же В конфигурации Knex, указывающей на локальный mysql docker образ, ошибка никогда не возникает!

Мой docker файл имеет следующий вид:

FROM node:10-alpine
ADD . /app
WORKDIR /app
RUN npm i --only=prod

RUN rm -rf ./config/local.json
RUN rm -rf ./docker-compose.override.yml

CMD ["npm", "start"]

И моя docker -композиция выглядит так:

version: "3"

services:
  app:
    build: .
    container_name: <SERVICE_NAME>
    ports:
      - "9000:9000"
    # expose:
    #   - 9000
    depends_on:
      - mysql

  mysql:
    image: mysql:5.7.13
    container_name: mysql
    command: --default-authentication-plugin=mysql_native_password
    restart: unless-stopped
    volumes:
      - mysql:/var/lib/mysql
      - "./infrastructure/docker/initdb.sql:/docker-entrypoint-initdb.d/init.sql"
    environment:
      - MYSQL_ROOT_PASSWORD=password
    ports:
      - "3306:3306"
    # expose:
    #   - 3306

volumes:
  mysql:

Любая помощь или предложение, будут высоко оценены!

1 Ответ

0 голосов
/ 12 марта 2020

Просто дикая догадка, но иногда локальные зависимости могут влиять на поведение. Попробуйте проигнорировать папку node_modules, как предложено здесь

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