這是我的docker-compose.yml
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
FROM node:18-alpine
WORKDIR /var/www/html
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 8080
當我運行docker compose up -d它顯示
failed to solve: error from sender: open /path/to/project/docker/db/#innodb_temp: permission denied
我怎樣才能解決這個問題?或者任何其他在 PHP 容器中運行 nodejs 的方法?
uj5u.com熱心網友回復:
當您的 Compose 設定具有:
services:
mysql:
volumes:
- ./docker/db:/var/lib/mysql:delegated
node:
build:
context: .
MySQL資料目錄在./docker/db目錄中。那是.在 Node 應用程式的 build-context 目錄中,所以docker-compose build除其他外,它會將整個 MySQL 資料發送給它自己,如果資料庫當前正在運行,你可能會遇到這樣的鎖定或權限問題。
解決此問題的最佳方法是將應用程式拆分為單獨的目錄,并讓每個語言組件僅構建自己的子目錄。
$ ls -1F
data/
docker-compose.yml
js/
php/
static/
$ ls -1F js
Dockerfile
index.js
node_modules/
package.json
package-lock.json
# 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;我使用 Compose 提供的網路洗掉了不必要的container_name:和選項;并且我已經洗掉了覆寫影像內容的選項。確保有說明如何啟動容器的說明。)networks:defaultvolumes:./js/DockerfileCMD
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/486608.html
