2016-04-06 33 views
1

我認爲這是與機器相關的,但我不確定。我使用的是最新的碼頭工人的工具箱與碼頭工人1.10.3在OSX 我有使用Dockerfile,其拷貝代碼到這樣的容器的項目:已安裝的碼頭卷損壞文件

[...] 
COPY . /code 
VOLUME /code 
WORKDIR /code 
[...] 

爲了更快的本地開發(測試執行),我們在安裝撰寫文件的當前目錄

[...] 
volumes: 
     - .:/code 
[...] 

和執行

docker-compose -f docker-compose.yml -f docker-compose.testing.yml run web py.test 

現在,它看起來像我有兩個不同的文件夾/文件: 運行容器並用vi查看文件時,一切看起來都像在主機上。更改文件並執行我們的測試(pytest,特別是)讓python解釋器讀取垃圾,以便它不能執行測試。

一個文件的末尾看起來像這樣(這得到了複製在Dockerfile到容器):

post_save.connect(backup_something, sender=SomeSender, dispatch_uid='backup_something') foobar 
this obviously raises an error when executing, so I change it to 

post_save.connect(backup_something, sender=SomeSender, dispatch_uid='backup_something') 

文件現在看起來很好,無論從主機和所述容器內部。 執行pytest,它仍然讀取複製代碼的內容,爲我在本地打破測試。

如果我改變,甚至更多,這是既沒有複製或安裝的文件,所以在隨機位置的東西遊:

File "/code/some_code.py", line 69 
    dispatch_uid='backup_ 
         ^

語法錯誤:EOL同時掃描字符串字面 (尾顯示正確的語法等,還有絕對沒有代碼破壞)

是否有我們的設置有問題,或者它只是我的機器被破壞莫名其妙?我嘗試重新啓動並重新創建碼頭機,但這沒有幫助。

+0

你可能有更好的運氣發佈這個作爲Docker Compose存儲庫上的問題:https: //github.com/docker/compose。然後項目的維護人員可以與您一起工作並確定它是環境問題,用戶問題還是實際的錯誤。 –

+0

嗨!只是想知道,如果您在某個位置安裝卷時通常以某種方式進行 –

+0

,則文件夾將安裝在容器內並替換容器的文件夾。如果你在那裏添加文件,然後安裝,你基本上用本地安裝的文件夾替換docker文件夾。如果你在同一時間這樣做,我並不感到驚訝,你的文件被損壞。所以,你應該有一個帶有卷裝的開發圖像和一個帶COPY的prod圖像,但不能同時使用這兩個圖像。 – MrE

回答

-2

我對IOS沒有使用DT的經驗,但我認爲你可能已經完成了union mount

如果是這種情況,解決方案將是移動文件或掛載點,以便文件不會被鏡像。

This文章可能是相關的:

1

我會嘗試以只讀方式掛載,然後仔細檢查文件系統類型,如果有一些奇怪的事情。 幾年前有一個ntfs-3g破壞文件的錯誤,也許它是類似的東西(顯然不是ntfs,因爲我們在OS X上)