如何在 docker compose 中使用 sqlite3
Posted
技术标签:
【中文标题】如何在 docker compose 中使用 sqlite3【英文标题】:How to use sqlite3 with docker compose 【发布时间】:2019-01-17 00:54:41 【问题描述】:以下教程之间;
Dockerizing create-react-app Developing microservices - Node, react & docker我已经能够将我的 nodejs 应用程序转换为已启动并运行并连接到服务的 dockerized 微服务。但是,我的应用程序使用 Sqlite/Sequelize,这在 dockerizing 之前运行良好。
使用新设置,出现错误;
/usr/src/app/node_modules/sequelize/lib/dialects/sqlite/connection-manager.js:31
throw new Error('Please install sqlite3 package manually');
Error: Please install sqlite3 package manually at new ConnectionManager
(/usr/src/app/node_modules/sequelize/lib/dialects/sqlite/connection-manager.js:31:15)
我的问题是;
-
Sqlite3 可以和 Docker 一起使用吗
如果是这样,任何人都可以分享适用于此的示例 docker-compose.yml 和 Dockerfile 组合。
我的 docker-compose.yml
version: '3.5'
services:
user-service:
container_name: user-service
build: ./services/user/
volumes:
- './services/user:/usr/src/app'
- './services/user/package.json:/usr/src/package.json'
ports:
- '9000:9000' # expose ports - HOST:CONTAINER
web-service:
container_name: web-service
build:
context: ./services/web
dockerfile: Dockerfile
volumes:
- './services/web:/usr/src/app'
- '/usr/src/app/node_modules'
ports:
- '3000:3000' # expose ports - HOST:CONTAINER
environment:
- NODE_ENV=development
depends_on:
- user-service
我的用户/Dockerfile
FROM node:latest
# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# add `/usr/src/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH
# install and cache app dependencies
ADD package.json /usr/src/package.json
RUN npm install
# start app
CMD ["npm", "start"]
我的网络/Dockerfile
FROM node:latest
# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install react-scripts@1.1.4
RUN npm install gulp -g
# start app
CMD ["npm", "start"]
非常感谢。
【问题讨论】:
能否请您发布您当前Dockerfile
和docker-compose.yml
的内容
【参考方案1】:
知道了。问题是我的本地 node_modules 被复制到主机容器中。因此,在 sqlite3 lib/binding 中,存在 node-v57-darwin-x64 而不是预期的 - node-v57-linux-x64。因此一团糟。
我更新了 Dockerfiles 和 docker-compose.yml 如下:
我的 docker-compose.yml
services:
user-service:
container_name: user-service
build:
context: ./services/user/
dockerfile: Dockerfile
volumes:
- './services/user:/usr/src/app'
- '/usr/src/node_modules'
ports:
- '9000:9000' # expose ports - HOST:CONTAINER
web-service:
container_name: web-service
build:
context: ./services/web/
dockerfile: Dockerfile
volumes:
- './services/web:/usr/src/app'
- '/usr/src/app/node_modules'
ports:
- '3000:3000' # expose ports - HOST:CONTAINER
environment:
- NODE_ENV=development
depends_on:
- user-service
我的用户/Dockerfile
FROM node:latest
# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# add `/usr/src/node_modules/.bin` to $PATH
ENV PATH /usr/src/node_modules/.bin:$PATH
# install and cache app dependencies
ADD package.json /usr/src/package.json
RUN npm install
# start app
CMD ["npm", "start"]
有用的帖子 Getting npm packages to be installed with docker-compose
【讨论】:
以上是关于如何在 docker compose 中使用 sqlite3的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spark docker-compose 网络中提交 jar?
(Docker)如何在 WordPress 容器中使用单独的 Composer 容器安装依赖项?
如何在 Docker-Compose 中一起使用主机网络和任何其他用户定义的网络?
如何知道我的程序是不是完全在我的 docker 中使用 compose 启动
如何在 AWS Elastic Container Service 中使用现有的 docker-compose.yml 文件?