2017-02-22 39 views
2

我是碼頭工作者的新手,我嘗試爲不同的網站創建碼頭工作站圖像。即使初始化,碼頭撰寫量也是空的

除了我的卷以外,一切正常。

這裏是碼頭工人,撰寫的爲例:

version: '2' 

services: 
    website: 
    build: 
     context: ./dockerfiles/           
     args:                  
      MYSQL_ROOT_PASSWORD: [email protected] 
    volumes: 
     - ./logs:/var/log 
     - ./html:/var/www 
     - ./nginx:/etc/nginx 
     - ./mysql-data:/var/lib/mysql 
    ports: 
     - "8082:80" 
     - "3307:3306" 

ANF這裏是我的搬運工文件:

FROM php:5.6-fpm 

ARG MYSQL_ROOT_PASSWORD 

RUN export DEBIAN_FRONTEND=noninteractive; \ 
echo mysql-server mysql-server/root_password password $MYSQL_ROOT_PASSWORD | debconf-set-selections; \ 
echo mysql-server mysql-server/root_password_again password $MYSQL_ROOT_PASSWORD | debconf-set-selections; 

RUN apt-get update && apt-get install -y -q mysql-server php5-mysql nginx wget 

EXPOSE 80 3306 

VOLUME ["/var/www", "/etc/nginx", "/var/lib/mysql", "/var/log"] 

一切工作順利,希望我所有的文件夾爲空進入我的主機卷。我想將nginx conf和mysl數據放到我的文件夾中。

我在做什麼錯?

感謝您的幫助。

編輯1: 其實問題是我想要docker-compose在我的docker目錄中創建卷(如果它不存在),並使用此卷(如果它存在),如https://stackoverflow.com/a/39181484中所述。但似乎並不奏效。

+0

我相信這涵蓋了你的情況:[創建Docker卷與預先存在的數據](http://stackoverflow.com/questions/36152081/create-docker-volume-with-preexisting-data-in-it/36152439 #36152439) – jrbeverly

+1

可能重複[創建具有預先存在數據的Docker卷](http://stackoverflow.com/questions/36152081/create-docker-volume-with-preexisting-data-in-it) – jrbeverly

+0

實際上問題是我想要docker-compose在我的docker目錄中創建卷(如果它不存在),並使用此卷(如果存在),如http://stackoverflow.com/a/39181484中所述。但似乎並不奏效。 – Mayous

回答

5

問題是您希望您希望容器中的文件安裝在主機上。

這不是它的工作方式:它是周圍的其他方法:

泊塢窗安裝在容器文件夾主機文件夾指定。 如果你進入容器內部,你會看到在哪裏應該有init文件,什麼都沒有(或者你的主機文件夾中有什麼),你可以在文件夾中寫一個文件,將顯示在您的主機上。

你最好的選擇,以獲得初始化文件,並修改它們爲你的容器是:

  • 沒有安裝文件夾(原來的容器數據將在那裏)
  • 運行容器創建一個容器(在容器將文件從安裝nginx的等合適的地方......)docker run <image>
  • 將文件複製出該容器內docker cp <container>:<container_folder>/* <host_folder>
  • 現在,你有你的主機上從容器初始化的「原始」檔案。
  • 根據需要修改容器的文件。
  • 運行裝有主機文件夾的容器,其中包含新文件。

注: 你可能想要去與外殼(docker run -it <image> /bin/sh)的容器內,並拉上所有的文件夾,以確保您得到的一切,如果有嵌套的文件夾,然後docker cp ... zip文件

而且,注意文件系統區分大小寫:在Linux文件區分大小寫。在Mac OS X上,他們不是。因此,如果您在同一個文件夾中有Init.confinit.conf,那麼當您將它們複製到Mac OS X主機時,它們會發生衝突。

+0

感謝您的回答。我所看到的是,如果我在沒有在docker-compose中指定任何內容的情況下將容量掛載到容器中,則每個容量的內容僅在主機中可見時纔會顯示在「/var/lib/docker/volumes/.../_data」中該卷之前不存在。我的理解是,如果我爲我的卷指定另一條路徑進入主機(就像我在docker-compose中做的那樣),即使該文件夾之前不存在,行爲也是不同的? – Mayous

+0

你不應該亂搞/ var/lib/docker/volumes ...因爲這是Docker的內部。 Docker會根據需要創建/刪除這些文件夾,所以不要依賴它。 Docker使用分層文件系統,因此如果它們被多次定義,它就會重新使用卷。同樣,不要依賴Docker的內部文件來完成您的工作:安裝它在容器上的主機文件夾,並且只希望在容器上顯示內容。如果您在容器文件夾中有文件,如果您未裝入主機文件夾,它們將在那裏。 – MrE

+0

如果你需要兩套文件,那麼你應該有一個ENTRYPOINT,它將運行一個腳本並決定加載哪一個文件。然後,您可以在需要的地方模擬鏈接正確的文件夾/文件。 – MrE

相關問題