docker-compose volumes指令路径映射问题
背景:最近在自学docker容器知识,在跟着《Docker - 从入门到实践》进行 docker-compose 搭建django/postgreSQL 实例。在搭建过程中由于自己操作失误以及理解不到位导致在出现错误的时加大了排错难度。为了防止以后忘记因此记录在此。
如下直接贴出docker-compose项目环境:
# uname -r
3.10.-.el7.x86_64
# cat /etc/redhat-release
CentOS Linux release 7.6. (Core)

项目目录结构:
compose_django_postgresql: docker-compose.yml 文件存放路径
django:原本django服务容器需挂载的路径
postgresql:原本 postgresql服务容器需挂载的路径
Dockerfile:构建 django 镜像的文件
requirements:django服务容器需安装的python扩展包
Dockerfile文件内容如下:
FROM python:2.7
ENV PYTHONUNBFFERED
RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/
docker-compose.yml文件内容如下:
postgresql:
image: postgres django:
build: ./django
volumes:
- django:/code
ports:
- "8000:8000"
links:
- postgresql
command: python manage.py runserver 0.0.0.0:
一直到这一步都很顺利,哼哼,然后开始跟着教材执行 docker-compose 命令
[root@TestDocker compose_django_postgresql]# docker-compose run django django-admin.py startproject mytest_dockerdjango
Pulling postgresql (postgres:)...
latest: Pulling from library/postgres
...........
...........
Removing intermediate container 840872e8a932
Successfully built 1dd4f62b514e
Successfully tagged compose_django_postgresql_django:latest
WARNING: Image for service django was built because it did not already exist. To rebuild this image you must use `docker-compose build` or `docker-compose up --build`.
启动无报错~~~
由于之前测试 docker-compose up 启动项目之后在 web 上访问出现 ip 允许问题

我就想这既然把django目录挂载到了服务容器到 /code 目录,那我直接去django目录下修改是否是一样的,于是乎。。。。

what~~~, 刚创建的django项目目录呢?为了解决这个疑问查询了资料也没搞清楚问题在哪儿(原谅初学小白,哈哈!),我还在服务器上使用 docker-compose 建立了一个 wordpress项目,完全无问题~~~,后来在一次重新运行 docker-compose run django 中出现了如下错误:
# docker-compose run django django-admin startproject mytest_dockerdjango
Starting compose_django_postgresql_postgresql_1 ... done
CommandError: '/code/mytest_dockerdjango' already exists
我注意到了‘'/code/mytest_dockerdjango' already exists’,因此我想我在 docker-compose.yml volumes指定可能有问题, django目录可能不是相对于我所在当前目录,使用find命令搜索之后证实了这一点

于是我开始修改了 docker-compose.yml文件、停掉清理之前挂载的卷重新创建镜像并且运行 docker-compose run django django-admin startproject XXX
# cat docker-compose.yml
postgresql:
image: postgres
django:
build: ./django
volumes:
- ./django:/code
ports:
- "8000:8000"
links:
- postgresql
command: python manage.py runserver 0.0.0.0:8000
# docker-compose stop
# docker-compose down --volumes
# docker-compose build --no-cache
# docker-compose run django django-admin startproject mytest_dockerdjango
然后再查看django目录有django 项目文件了

参考文件:《Docker - 从入门到实践》
docker-compose volumes指令路径映射问题的更多相关文章
- Docker Compose搭建ELK
Elasticsearch默认使用mmapfs目录来存储索引.操作系统默认的mmap计数太低可能导致内存不足,我们可以使用下面这条命令来增加内存: sysctl -w vm.max_map_count ...
- Docker Compose 配置文件常用指令
Docker Compose 配置文件常用指令 YAML文件格式及编写注意事项 YAML是一种标记语言很直观的数据序列化格式,可读性高.类似于XML数据描述语言,语法比XML简单的很多. YAML数据 ...
- Docker(四):Docker 三剑客之 Docker Compose
前两篇文章我们介绍了 Dockerfile 的使用Docker(二):Dockerfile 使用介绍,我们知道使用一个 Dockerfile 模板文件可以定义一个单独的应用容器,如果需要定义多个容器就 ...
- Docker学习笔记 - Docker Compose 脚本命令
Docker Compose 配置文件包含 version.services.networks 三大部分,最关键的是 services 和 networks 两个部分, version: '2' se ...
- Docker 系列五(Docker Compose 项目).
一.概念 Docker Compose 是官方编排项目之一,负责快速的部署分布式应用.它允许用户通过一个单独的 docker-compose.yml 模板文件(YAML格式)来定义一种相关联的应用容器 ...
- 构建Docker Compose服务堆栈
1.安装了docker-compose,现在我们要使用docker-compose来运行容器栈.这个地方会有两个容器,一个容器中使用Flask搭建的简单应用,另一个容器是Redis,Flash会向re ...
- Docker三剑客之Docker Compose
一.什么是Docker Compose Compose 项目是Docker官方的开源项目,负责实现Docker容器集群的快速编排,开源代码在https://github.com/docker/comp ...
- 一文掌握Docker Compose
目录 Docker Compose介绍 Docker Compose安装 Docker Compose基本示例 1.基本文件及目录设置 2.创建一个Dockerfile 3.通过docker-comp ...
- docker——三剑客之Docker Compose
编排(Orchestration)功能是复杂系统实现灵活可操作性的关键.特别是在Docker应用场景中,编排意味着用户可以灵活的对各种容器资源实现定义和管理. 作为Docker官方编排工具,Compo ...
随机推荐
- 5 天 4000 star 的一个爆款开源项目
今天早上起来浏览 GitHub 的时候,在周热门趋势排行榜上看到了这么一个开源项目,仅仅 5 天时间,爬到了周排行榜的第一名的位置.而在每天的排行榜上,今天一早也高高位居排行榜的第二位. 这个开源项目 ...
- Serervlet | 两种跳转方式
https://www.cnblogs.com/fanhc/archive/2012/09/21/2696343.html response.sendRedirect是向客户浏览器发送页面重定向指令, ...
- PostgreSQL-14-异常值处理
-- 查看异常值CREATE TABLE outerdata(id int PRIMARY KEY,value numeric); \COPY outerdata FROM 'C:\Users\iHJ ...
- Python-2-序列及通用序列操作
序列包括字符串,列表,元祖,序列中的每个元素都有编号,其中只有元祖不能修改 通用序列操作包括索引. 切片. 相加. 相乘和成员资格检查 索引 >>> greeting = ' ...
- 证书重复冲突问题:Command /usr/bin/codesign failed with exit code 1
打开钥匙串 查看是否有两个identifier为相同 的证书,显然导证书的时候不知道怎么把证书导进了系统帐号,并且还重复了.把重复的证书删除就行了.
- svn基本命令
*验证svn安装是否成功 #svnadmin --version *创建svn的数据仓库 #svnadmin create /data/svn/svndata/spms *启动svn服务 #svnse ...
- git reflog查看所有操作记录
git reflog 可以查看所有分支的所有操作记录(包括(包括commit和reset的操作),包括已经被删除的commit记录,git log则不能察看已经删除了的commit记录 具体一个例子, ...
- 操作系统内核(linux)
操作系统的内核(Kernel) 是一组程序,这组程序的重点在于管理计算机的所有活动以及驱动系统中的所有硬件. 有了内核后,开发者不必自己去考虑机器语言.所有硬件的相关参数.程序的可移植性.专一性了.但 ...
- nodejs Async 使用方法(解决多层回调嵌套)
由于nodejs是异步处理的,有时我们想同步从mysql里取出数据,最后在处理逻辑 就需要用到此扩展: 此扩展可以避免多层回调: 安装方法: npm install async 使用方法: 1.par ...
- 关于Winform控件调用插入点(光标)的用法
我们自定义控件中可能会有一些光标的使用,比如插入文字和图片提示,下面是调用WIN32 API的光标用法 Winform控件调用插入点的用法 // 导入处理光标的 Windows 32 位 API // ...