# Install flask and oracle-instant-client using docker container ###### tags: `教學` `oracle-instant-client` `flask` `docker` :::info :boy: **編輯:** neverleave0916 :mailbox_closed: **聯絡資訊:<neverleave0916@gmail.com>** :point_right: **<font color="#B24B42">修改日期:** 2022/03/25 02:53</font> ::: ## Prerequirements:penguin: * 安裝docker ## 啟動Docker 啟動我們要進行操作的docker container ```bash+= docker run --ipc=host -it -v $(pwd):/workspace -p 8080:8080 -p 5000:5000 --name=DB_CLASS continuumio/anaconda3 ``` ## 安裝套件 安裝flask應用程式以及連線oracle會用到的套件 ```bash+= conda install -c anaconda flask conda install -c anaconda flask-login conda install -c anaconda cx_oracle ``` ## 安裝oracle-instant-client [](https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html#oracle-instant-client-zip-files) - 去這裡 - https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html - 下載 - Basic Package (ZIP) - SQL*Plus Package (ZIP) - SDK Package (ZIP) - 解壓縮並全部丟到同一個資料夾 - 資料夾名稱: instantclient_21_5 - 路徑: /workspace/Demo/instantclient_21_5 - 備註: Demo是專案資料夾,不一定要放在這裡 - 繼續安裝 [參考及error "libnnz19.so: cannot open shared object file: No such file or directory](https://stackoverflow.com/questions/67112457/libnnz19-so-cannot-open-shared-object-file-no-such-file-or-directory) ```bash= #安裝套件 conda install -c anaconda libaio #export環境變數(如果只是要暫時啟動的話,每次執行都要重新export) #https://cx-oracle.readthedocs.io/en/latest/user_guide/installation.html#oracle-instant-client-zip-files export LD_LIBRARY_PATH=/workspace/Demo/instantclient_21_5:$LD_LIBRARY_PATH ``` ## Error處理 1. ImportError: cannot import name 'Self' from 'typing_extensions' [解決方法](https://stackoverflow.com/questions/69174965/cannot-import-name-typeguard-from-typing-extensions) ```bash= pip install typing-extensions --upgrade ``` ## 啟動Flask(hot reload) [Flask - Webserver not reloading on code change](https://stackoverflow.com/questions/46008128/flask-webserver-not-reloading-on-code-change) [Configure Flask dev server to be visible across the network](https://stackoverflow.com/questions/7023052/configure-flask-dev-server-to-be-visible-across-the-network) ```bash= FLASK_DEBUG=1 flask run --host=0.0.0.0 ```