2017-06-21 68 views
1

我想有一個服務來構建我的客戶端,然後使用命名卷將其共享到服務器。每次我做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

可能的重複:https://stackoverflow.com/questions/44251094/i-want-to-share-code-content-across-several-containers-using-docker-compose-volu/44265470(抱歉第二次前關閉) – BMitch

回答

0

根據定義,體積是泊塢窗不會接觸其它持久目錄比當它們執行初始創建空。如果這是你的代碼,它可能不應該是一個音量。

雖這麼說,你可以:

  1. 刪除運行之間的體積docker-compose down -v,它將被重新初始化並在下次docker-compose up -d

  2. 更改您的容器啓動腳本以將映像中某個其他目錄中的文件複製到啓動時的卷位置。

  3. 擺脫音量並直接在圖像中包含代碼。

我推薦後者。

+0

感謝您的回覆。我將如何去實施#3?將代碼直接包含在圖像中意味着什麼? – Ero

+0

對於#3,您從docker-compose.yml中刪除卷線,並將「COPY」行保留在Dockerfile中。 – BMitch

+0

如果我這樣做,我的服務器項目將如何使用客戶端文件?它們位於何處? – Ero