最近遇到一個問題,用docker-compose編排的mysql和django服務(wù),在django模型上加了一個沒有默認值(就不想在模型上加default=xxx)的非空字段,這時候django會要求你提供一個默認值給這個字段。這時候容器將會啟動失敗。想嘗試docker run單獨啟動django服務(wù),但又依賴容器化的mysql服務(wù)。那該怎么辦呢?
docker-compose.yml文件:
version: '2.0'
services:
mysql:
image: mysql:5.7
container_name: itom_service_mysql
restart: always
ports:
- "33063:3306"
volumes:
- ./docker_files/mysql/data:/var/lib/mysql
- ./docker_files/mysql/conf:/etc/mysql/conf.d
- ./docker_files/mysql/logs:/var/log/mysql
- ./docker_files/mysql/init:/docker-entrypoint-initdb.d/
environment:
- MYSQL_ROOT_PASSWORD=pwd123456
- TZ=Asia/Shanghai
command: [ 'mysqld' ]
networks:
- net-itom_service
backend:
image: jianbopei/itom_service:1.0.3
container_name: itom_service_django
restart: always
working_dir: /data/server/itom_service
env_file:
- .env
# 只在容器間暴露8000端口
expose:
- 8000
# 將容器8000映射到宿主機8000
# ports:
# - "8000:8000"
volumes:
- /data/server/itom_service/static #靜態(tài)文件
- ./itom_service:/data/server/itom_service #代碼
- ./itom_service/logs/:/data/server/itom_service/logs #日志
depends_on:
- mysql
networks:
- net-itom_service
command: ['sh', '/data/server/run/wait-for.sh', 'mysql:3306', '--', 'sh', '/data/server/run/start.sh']
networks:
net-itom_service:
driver: bridge
此時,就可以以交互式方式啟動容器,到容器里面執(zhí)行migrate命令并提供一個默認值。命令格式為:
docker-compose run?your_service sh
your_service是docker-compose.yml文件中定義的服務(wù)名稱,本例中為backend。
- 執(zhí)行docker-compose run?-d mysql,啟動mysql容器以便做數(shù)據(jù)遷移
- 執(zhí)行docker-compose run backend sh,以交互式啟動django服務(wù)容器
- 以交互式啟動容器后,就可以執(zhí)行migrate命令并提供默認值了
當然如果你在backend定義了depend_on:mysql,也可以直接運行docker-compose run backend sh,這會自動幫你拉起mysql服務(wù)。文章來源:http://www.zghlxwxcb.cn/news/detail-405518.html
總結(jié):文章來源地址http://www.zghlxwxcb.cn/news/detail-405518.html
- docker-compose也可以像docker一樣以交互式方式啟動容器
- docker-compose單獨啟動容器時,也會使用docker-compose.yml中定義的networks網(wǎng)絡(luò),所以不用擔心上面的mysql和backend容器網(wǎng)絡(luò)連通性問題
到了這里,關(guān)于docker-compose 以交互式方式運行你的容器的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!