docker-compose build not rebuild project
lyc2345 opened this issue · 8 comments
嗨,很好的教學,但我遇到一個問題,能不能為我解惑解惑,麻煩你了。
我clone了這個專案,然後執行docker-compose up --build
這時候如果我輸入http://0.0.0.0:8080/api/music/ 瀏覽器會出現下列錯誤
api-container | File "./django_rest_framework_tutorial/urls.py", line 26, in <module>
api-container | url(r'^api/', include(router.urls, namespace='api'), name='api'),
api-container | File "/usr/local/lib/python3.6/site-packages/django/urls/conf.py", line 39, in include
api-container | 'Specifying a namespace in include() without providing an app_name '
api-container | django.core.exceptions.ImproperlyConfigured: Specifying a namespace in include() without providing an app_name is not supported. Set the app_name attribute in the included module, or pass a 2-tuple containing the list of patterns and app_name instead.
api-container | [pid: 10|app: 0|req: 1/2] 172.23.0.1 () {42 vars in 744 bytes} [Mon Jan 8 09:05:38 2018] GET /admin/ => generated 109203 bytes in 161 msecs (HTTP/1.1 500) 4 headers in 130 bytes (1 switches on core 0)
是include的錯誤,但我也不太知道怎麼解決,我使用最簡單的方法就是刪除api/ , api-auth/
只留下url(^'admin', ...)
這一行,因為我只想測試nginx,uwsgi,django之間的溝通,但我發現我每次重新build,我進入到api-container查看 cat django_rest_gramework_tutorial/url.py
被我刪除的兩行都沒有被刪除。
然後我想說是不是他沒有確實rebuild,然後我也有試過docker-compose down
之後再重新build也還是會出現,我甚至直接docker rmi image
,但也一樣,不知道您有沒有遇過類似的情形呢?
hi 你好,這是因為 django 2.0 的關係,你把 api 裡面的 requirements.txt 修改為 django<=2.0 即可,因為太多的 repo 要改了QAQ,這個沒改到,你改完再重新執行一次應該就可以 work 了
我改了重新build還是一樣,看樣子是django也沒有真正改成<=2.0。
但主要問題是您是否也有遇過明明改了code,例如我把url.py刪去,但我docker-compose build
了還是會出現...
試試先執行 docker-compose down -v
, 然後再重新build ~
這是 volume 的概念,你可以參考 Docker 基本教學 - 從無到有 Docker-Beginners-Guide
Hello twtrubiks,
超讚的教學!
我也是遇到一樣的問題,那以後每當修改到程式碼的時候,
就要docker-compose down -V 刪除container
再docker-compose up 在新建container
好像很麻煩,有更好的方法?
感謝
@barbo1942 因為 volume 有兩種設定方式,
一種是將路徑同步到你的 host 本機,另一種是 Named volume。
我這個範例是使用 Named volume 這方法 (也是官方推薦的),
如果你會反覆的修正code,我會建議使用將路徑同步到你的 host 本機的方法(同步你會反覆修改的地方),
你可以參考我這個範例 Docker + Jenkins + Django + Postgres 設定,
這教學裡有兩種方式。
- 找docker-compose位置
whereis docker-compose
- 如果有安裝 先刪掉之前安裝的檔案
rm /usr/bin/docker-compose
- 進到root
sudo -i
-
下載檔案放到/usr/bin/
curl -L https://github.com/docker/compose/releases/download/1.11.1/docker-compose-`uname -s-uname -m
> /usr/bin/docker-compose -
修改權限
chmod +x /usr/bin/docker-compose
我认为
....
api:
volumes:
- api_data:/docker_api
...
是把整个项目做为数据卷了,这样即便你更新了代码,无论如何rebuild都是老代码,因为代码被数据卷里都代码所覆盖。
- .:/docker_api
- static_volume:/docker_api/static
- media_volume:/docker_api/media
这样会比较合适