Невозможно подключить именованную базу данных томов docker из sqlite3, используя nodejs - PullRequest
0 голосов
/ 03 апреля 2020

Мы используем два контейнера, один из которых Python flask, а другой - ExpressJS, мы создали docker том вручную docker volume create --name localdb, этот том работает нормально с python приложение, в котором я создал docker -компонент и определил том как внешний true.

Мы вставили некоторые данные из Python, и записи завершены, поэтому мы пытаемся прочитать существующие данные из lacaldb/reviews.db

Но он не работает для прямого доступа через Docker, работает для ExpressJs Приложение

Docker, команда:

docker container run -v localdb:/database --name dcserver --rm localserver:v1

Использование nodeJs v12 и ExpressJs с SQlite3 для хранения данных, создайте том Docker для базы данных Sqlite. Мы создали том вручную с помощью команды docker и пытались получить к нему доступ с помощью команды docker run, но получили ошибку.

Ошибка:

[Error: SQLITE_CANTOPEN: unable to open database file
Emitted 'error' event on Database instance at:
] {
  errno: 14,
  code: 'SQLITE_CANTOPEN'
}

Пример NodeJs Сценарий:

var sqlite3 = require('sqlite3').verbose()
var db = new sqlite3.Database(process.env.LOCAL_DB_PATH)
console.log(process.env.LOCAL_DB_PATH)  // Prints "/localdb/reviews.db"

async function getReviews(){

             db.all(`SELECT * from REVIEWS`, [], function(err, res) {
                if (err) {
                    console.log(err.message)
                }
                console.log(res)
            }) 
}

export default getReviews

Проверенный том localdb:

$ docker volume inspect localdb

[
    {
        "CreatedAt": "2020-04-03T17:01:29Z",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/localdb/_data",
        "Name": "localdb",
        "Options": {},
        "Scope": "local"
    }
]

docker -составить .yml // здесь работает нормально

version: "3.7"

services: 
    flask:
        build: ./flask
        container_name: flask
        restart: always
        environment: 
            - APP_NAME=myFlaskApp
        expose: 
            - 8080
        volumes: 
            - localdb:/database
    nginx:
        build: ./nginx
        container_name: nginx
        restart: always
        ports: 
            - "80:80"
volumes:
    localdb:
        external: true
...