我正在尝试使用一个服务来构建我的客户端,然后使用命名卷将其共享到服务器。每次我执行docker-compose up --build
时,我都希望客户端构建和更新命名卷clientapp:
。我该怎么做?
搬运工-compose.yml
version: '2'
volumes:
clientapp:
services:
database:
image: mongo:3.4
volumes:
- /data/db
- /var/lib/mongodb
- /var/log/mongodb
client:
build: ./client
volumes:
- clientapp:/usr/src/app/client
server:
build: ./server
ports:
- "3000:3000"
environment:
- DB_1_PORT_27017_TCP_ADDR=database
volumes:
- clientapp:/usr/src/app/client
depends_on:
- client
- database
客户端Dockerfile
FROM node:6
ENV NPM_CONFIG_LOGLEVEL warn
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY package.json /usr/src/app
RUN npm install
COPY . /usr/src/app
# builds my application into /client
CMD ["npm", "build"]
答案 0 :(得分:2)
根据定义,卷是docker不会触及的持久目录,而不是在它们为空时执行初始创建。如果这是您的代码,它可能不应该是一个卷。
话虽如此,你可以:
使用docker-compose down -v
删除之间的广告系列,并在下一个docker-compose up -d
重新创建并初始化。
更改容器启动脚本,将文件从映像中的其他目录复制到启动时的卷位置。
摆脱音量并将代码直接包含在图像中。
我推荐后者。
答案 1 :(得分:0)
假设您像这样共享src文件夹:
...
volumes:
- ./my_src:/path/to/docker/src
...
对我有用的是整理my_src
文件夹:
chown $USER:$USER -R my_src
事实证明,某些文件是由root创建的,而docker无法对其进行修改。
希望有帮助!