docker - Docker撰写不安装卷?
问题描述
如果我运行此命令,卷将挂载,并且容器按预期以初始化状态启动:
docker run --name gogs --net mk1net --ip 203.0.113.3 -v gogs-data:/data -d gogs/gogs
但是,如果我运行相应的docker-compose
脚本,则卷不会挂载。容器仍然启动,但没有启动时读取的状态。
version: '3'
services:
gogs:
image: gogs/gogs
ports:
- "3000:3000"
volumes:
- gogs-data:/data
networks:
mk1net:
ipv4_address: 203.0.113.3
volumes:
gogs-data:
networks:
mk1net:
ipam:
config:
- subnet: 203.0.113.0/24
有任何想法吗?
解决方案
查看您的命令,gogs-data
卷是在 docker compose 文件之外定义的,可能使用类似:
docker volume create gogs-data
如果是这样,那么您需要在 docker compose 文件中将其指定为外部,如下所示:
volumes:
gogs-data:
external: true
您还可以为外部卷定义不同的名称,并在 docker compose 文件中继续使用当前卷名称以避免命名冲突,例如,假设您的项目是关于销售汽车的,因此您希望调用外部卷selling-cars-gogs-data
但想要为了让它像gogs-data
在你的 docker compose 文件中一样简单,那么你可以这样做:
volumes:
gogs-data:
external:
name: selling-cars-gogs-data
或者甚至更好地使用环境变量来为更动态的 docker compose 设计设置卷名,如下所示:
volumes:
gogs-data:
external:
name: "${MY_GOGS_DATA_VOLUME}"
然后像这样启动你的 docker compose:
env MY_GOGS_DATA_VOLUME='selling-cars-gogs-data' docker-compose up
希望这会有所帮助,如果您想了解更多信息,这里还有一个指向 docker compose 外部卷文档的链接:https ://docs.docker.com/compose/compose-file/#external
您几乎可以将所有东西都放在外部,包括连接到其他 docker compose 容器的容器链接。
推荐阅读
- c++ - QTabWidget 与 QGraphicsView
- django - Django的sqlsequencereset后的主键验证
- javascript - 如何在 Here Maps API for JavaScript 上实现类似 Google Maps 的滚动行为?
- python - 声纳问题:删除此“\”,添加另一个“\”以对其进行转义,或将其设为原始字符串
- java - Java 8 Stream:一次平均和计数
- python - 如何在 HTTP 响应中返回 HTML 文件(Azure-Functions)
- json - Nlog json配置问题未指定'AsyncWrapper Target [xxx]()'上的必需参数'WrappedTarget'
- ubuntu - 未能为语言环境加载 hunspell 字典
- c# - 手动实例化多个 DbContext 无需依赖注入
- postgresql - 存储过程:如何检查 NULL 是否存在于 postgresql 数组中?