dockerd 預設只使用 /var/run/docker.sock,如果需要讓其他的 host 去管理,就需要額外設定。
在 Ubuntu trusty 裡,要編輯 /etc/default/docker,加入
DOCKER_OPTS="-H 0.0.0.0:2375"
然後重新啟動就可以了。
不過這樣設定以後,就等於任何人都可以透過這個 port 去控制你這台機器裡的所有 container ,官方建議加上 TLS 來保障連線的安全,晚點再來研究怎麼加上 TLS 。
參考資料:
Just thinking more…
dockerd 預設只使用 /var/run/docker.sock,如果需要讓其他的 host 去管理,就需要額外設定。
在 Ubuntu trusty 裡,要編輯 /etc/default/docker,加入
DOCKER_OPTS="-H 0.0.0.0:2375"
然後重新啟動就可以了。
不過這樣設定以後,就等於任何人都可以透過這個 port 去控制你這台機器裡的所有 container ,官方建議加上 TLS 來保障連線的安全,晚點再來研究怎麼加上 TLS 。
參考資料:
前幾天上傳程式到 openshift 時,發現新版的 six 安裝不上去,原因是 OpenShift 所帶的 six 是 0.3 版,但是無法透過 sudo 等之類的方式來安裝新版,所以想查到底是哪個模組會需要用到新版的 six。上網找了一下,發現 pipdeptree 可以滿足我的需求。
用 pip install pipdeptree 就可以安裝,使用上也很簡單,輸入 pipdeptree 就會列出各個模組的相依性與其所需最低版本。
結果大致是這樣:
Warning!!! Possibly conflicting dependencies found: * HaodooScraper-Flask==1.0 - python-dateutil [required: ==2.3, installed: 2.6.0] - six [required: ==1.3.0, installed: 1.10.0] ------------------------------------------------------------------------ alembic==0.6.7 - Mako [required: Any, installed: 1.0.0] - MarkupSafe [required: >=0.9.2, installed: 0.23] - SQLAlchemy [required: >=0.7.3, installed: 0.9.8] cssselect==0.9.1 Flask-APIBlueprint==1.0.0 - flask [required: >=0.11.1,<1.0, installed: 0.12] - click [required: >=2.0, installed: 6.7] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.9.5] - MarkupSafe [required: >=0.23, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.12.1] - six [required: <2.0,>=1.10.0, installed: 1.10.0] HaodooScraper-Flask==1.0 - Flask [required: Any, installed: 0.12] - click [required: >=2.0, installed: 6.7] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.9.5] - MarkupSafe [required: >=0.23, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.12.1] - Flask-Bootstrap [required: Any, installed: 3.3.7.1] - dominate [required: Any, installed: 2.3.1] - Flask [required: >=0.8, installed: 0.12] - click [required: >=2.0, installed: 6.7] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.9.5] - MarkupSafe [required: >=0.23, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.12.1] - visitor [required: Any, installed: 0.1.3] - Flask-JsonTools [required: Any, installed: 0.1.1.post0] - flask [required: >=0.10.1, installed: 0.12] - click [required: >=2.0, installed: 6.7] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.9.5] - MarkupSafe [required: >=0.23, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.12.1] - flask-restplus [required: Any, installed: 0.10.1] - aniso8601 [required: >=0.82, installed: 1.2.0] - python-dateutil [required: Any, installed: 2.6.0] - six [required: >=1.5, installed: 1.10.0] - Flask [required: >=0.8, installed: 0.12] - click [required: >=2.0, installed: 6.7] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.9.5] - MarkupSafe [required: >=0.23, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.12.1] - jsonschema [required: Any, installed: 2.6.0] - pytz [required: Any, installed: 2017.2] - six [required: >=1.3.0, installed: 1.10.0] - Flask-WTF [required: Any, installed: 0.14.2] - Flask [required: Any, installed: 0.12] - click [required: >=2.0, installed: 6.7] - itsdangerous [required: >=0.21, installed: 0.24] - Jinja2 [required: >=2.4, installed: 2.9.5] - MarkupSafe [required: >=0.23, installed: 0.23] - Werkzeug [required: >=0.7, installed: 0.12.1] - WTForms [required: Any, installed: 2.1] - lxml [required: Any, installed: 3.4.0] - python-dateutil [required: ==2.3, installed: 2.6.0] - six [required: >=1.5, installed: 1.10.0] - requests [required: Any, installed: 2.13.0] - six [required: ==1.3.0, installed: 1.10.0] - SQLAlchemy [required: Any, installed: 0.9.8] nose==1.2.1 pipdeptree==0.10.1 - pip [required: >=6.0.0, installed: 9.0.1] pkg-resources==0.0.0 PyMySQL==0.6.2 pyOpenSSL==0.14 - cryptography [required: >=0.2.1, installed: 1.8.1] - asn1crypto [required: >=0.21.0, installed: 0.22.0] - cffi [required: >=1.4.1, installed: 1.10.0] - pycparser [required: Any, installed: 2.17] - idna [required: >=2.1, installed: 2.5] - packaging [required: Any, installed: 16.8] - pyparsing [required: Any, installed: 2.2.0] - six [required: Any, installed: 1.10.0] - setuptools [required: >=11.3, installed: 34.3.3] - appdirs [required: >=1.4.0, installed: 1.4.3] - packaging [required: >=16.8, installed: 16.8] - pyparsing [required: Any, installed: 2.2.0] - six [required: Any, installed: 1.10.0] - six [required: >=1.6.0, installed: 1.10.0] - six [required: >=1.4.1, installed: 1.10.0] - six [required: >=1.5.2, installed: 1.10.0] wheel==0.30.0a0
Django queryset 對日期時間的處理已經很完備了,可以透過使用 __year 或 __month 等方式來找到是某年或某月的紀錄。
這兩天碰到的狀況是,資料是 MySQL 時,日期時間的比對 (__year / __month) 失效了。仔細看過文件以後,才發現 MySQL 需要事先設定,使用 mysql_tzinfo_to_sql 載入時區表格才行。
This function performs time zone conversions directly in the database. As a consequence, your database must be able to interpret the value of tzinfo.tzname(None). This translates into the following requirements:
- SQLite: no requirements. Conversions are performed in Python with pytz (installed when you install Django).
- PostgreSQL: no requirements (see Time Zones).
- Oracle: no requirements (see Choosing a Time Zone File).
- MySQL: load the time zone tables with mysql_tzinfo_to_sql.
在終端機 (shell) 裡,輸入下列指令:
mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql
接著重新啟動 MySQL 伺服器即可。
mysql_tzinfo_to_sql 的用法不只一種,我選擇的是最簡單的用法。