>
目錄
- 前言
- 方案一:
- 方案二:
- 方案三:
- 總結
前言
在Linux Centos上面部署Docker容器,并且將原來的項目服務放到docker的某個鏡像中,啟動服務號發現無法連接到容器所在宿主機的mysql數據庫,但是現在項目服務需要連接mysql數據庫。
例如:SQLalchemy
# 初始化數據庫連接: TODO 參數化 engine = create_engine( f'mysql+mysqlconnector://{DB_USERNAME}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}') # 創建DBSession類型: DBSession = sessionmaker(bind=engine) # 創建session對象: session = DBSession()
但是在容器中項目localhost默認的是docker容器這個虛擬主機的ip,而我在docker該鏡像容器中上面并沒有安裝mysql服務,
方案一:
使用宿主機的ip地址,docker有自己的ip,宿主機所在的Centos服務器也有自己的ip,如果把項目訪問IP改為宿主機的ip。
輸入ifconfig
替換上面的項目中訪問mysql的地址即 localhost 替換好了之后啟動容器。這是土辦法,但遇到ip變動的window就不太可行。
方案二:
在docker配置文件yml中設置參數command
docker-compose.yml version: '3' services: mysql: restart: always image: mysql:5.7 container_name: mysql command: --default-authentication-plugin=mysql_native_password #解決外部無法訪問 volumes: - ./mydir:/mydir - ./datadir:/var/lib/mysql - ./conf/my.cnf:/etc/my.cnf # 數據庫還原目錄 可將需要還原的sql文件放在這里 - /docker/mysql/source:/docker-entrypoint-initdb.d environment: - MYSQL_ROOT_PASSWORD=password - TZ=Asia/Shanghai ports: - 3306:3306
方案三:
如果mysql是非docker容器化部署,可以進行掛載外部mysql
docker run -p 3306:3306 --name mysql \ -v /usr/local/docker/mysql/conf:/etc/mysql \ -v /usr/local/docker/mysql/logs:/var/log/mysql \ -v /usr/local/docker/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ -d mysql:5.7
配置my.cnf信息
[mysqld] # 服務端字符集 character-set-server=utf8 collation_server = utf8_general_ci [client] # 客戶端字符集 default-character-set=utf8
另有網友提供
找到my.cnf配置文件
注釋掉 bind-address = 127.0.0.1,
重啟mysql
總結
>