首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker如何运行节点js

Docker如何运行节点js
EN

Stack Overflow用户
提问于 2022-06-06 09:45:18
回答 1查看 231关注 0票数 -1

这是我的docker-compose.yml

代码语言:javascript
复制
version: '3.9'

networks:
  bedrock:

services:
  web:
    container_name: kawa-web
    image: nginx:stable-alpine
    volumes:
      - ./:/var/www/html:delegated
      - ./docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8080:80
    depends_on:
      - php
      - mysql
    networks:
      - bedrock

  php:
    container_name: kawa-php
    image: nanoninja/php-fpm:8.0
    volumes:
      - ./:/var/www/html
      - ./docker/config/php.ini:/usr/local/etc/php/conf.d/php.ini
    ports:
      - 9000:9000
    networks:
      - bedrock

  mysql:
    container_name: kawa-db
    image: mysql:8
    volumes:
      - ./docker/db:/var/lib/mysql:delegated
    ports:
      - 3306:3306
    command: --default-authentication-plugin=mysql_native_password
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
    networks:
      - bedrock

  node:
    container_name: kawa-node
    build:
      context: .
      dockerfile: node.dockerfile
    volumes:
      - ./:/var/www/html
    networks:
      - bedrock

node.dockerfile含量

代码语言:javascript
复制
FROM node:18-alpine

WORKDIR /var/www/html

COPY package*.json ./

RUN npm install

COPY . .

EXPOSE 8080

当我运行docker compose up -d时,它显示

代码语言:javascript
复制
failed to solve: error from sender: open /path/to/project/docker/db/#innodb_temp: permission denied

我怎么才能解决这个问题?或者在PHP容器中运行nodejs的任何其他方式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-06 10:41:47

当您的组合设置具有:

代码语言:javascript
复制
services:
  mysql:
    volumes:
      - ./docker/db:/var/lib/mysql:delegated
  node:
    build:
      context: .

MySQL数据目录位于./docker/db目录中。它位于Node应用程序的.构建上下文目录中,因此docker-compose build和其他事情一样将整个MySQL数据发送给自己,如果数据库当前正在运行,您可能会遇到这样的锁或权限问题。

解决这一问题的最佳方法是将应用程序拆分为不同的目录,并让每个语言组件只构建自己的子目录。

代码语言:javascript
复制
$ ls -1F
data/
docker-compose.yml
js/
php/
static/

$ ls -1F js
Dockerfile
index.js
node_modules/
package.json
package-lock.json
代码语言:javascript
复制
# docker-compose.yml
version: '3.8'
services:
  ...
  mysql:
    image: mysql:8
    volumes:
      - ./data/db:/var/lib/mysql:delegated
    ports:
      - 3306:3306
    command: --default-authentication-plugin=mysql_native_password
    environment:
      - MYSQL_ROOT_PASSWORD=${DB_PASSWORD}
  node:
    build: ./js

(请注意,我使用了build:的简短语法来使用上下文目录中的默认Dockerfile;使用撰写提供的default网络删除了不必要的container_name:networks:选项;删除了覆盖图像内容的volumes:。确保./js/Dockerfile有一个CMD指令,说明如何启动容器。)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72515828

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档