docker-compose volumes指令路径映射问题

摘要:
在构建过程中,由于自身的操作错误和理解能力差,在出现错误时增加了故障排除的难度。为了防止将来遗忘,这里记录了它。什么~~,刚才创建的django项目目录呢?为了解决这个问题,我查询了数据,没有发现问题在哪里(原谅初学者小白,哈哈!

背景:最近在自学docker容器知识,在跟着《Docker - 从入门到实践》进行 docker-compose 搭建django/postgreSQL 实例。在搭建过程中由于自己操作失误以及理解不到位导致在出现错误的时加大了排错难度。为了防止以后忘记因此记录在此。

如下直接贴出docker-compose项目环境:

# uname -r
3.10.0-957.el7.x86_64
# cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)

docker-compose volumes指令路径映射问题第1张

项目目录结构:

compose_django_postgresql: docker-compose.yml 文件存放路径

django:原本django服务容器需挂载的路径

postgresql:原本 postgresql服务容器需挂载的路径

Dockerfile:构建 django 镜像的文件

requirements:django服务容器需安装的python扩展包

Dockerfile文件内容如下:

FROM python:2.7
ENV PYTHONUNBFFERED 1
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:8000

一直到这一步都很顺利,哼哼,然后开始跟着教材执行 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 允许问题

docker-compose volumes指令路径映射问题第2张

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

docker-compose volumes指令路径映射问题第3张

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 volumes指令路径映射问题第4张

于是我开始修改了 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-compose volumes指令路径映射问题第5张

参考文件:《Docker - 从入门到实践》

免责声明:文章转载自《docker-compose volumes指令路径映射问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇艾略特波浪理论onTouch与onClick事件的关系下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Django学习笔记之安全

CSRF攻击 CSRF攻击概述 CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式,它在 2007 年曾被列为互联网 20 大安全隐患之一。其他安全隐患,比如 SQL 脚本注入,跨站域脚本攻击等在近年来已经逐渐为众人熟知,很多网站也都针对他们进行了防御。然而,对于大多数人来说,CSRF 却依然是一个陌生的...

Django中常见字段类型简介

字段类型选择: AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 primary_key=True 注:当model中如果没有自增列,则自动会创建一个列名...

使用docker搭建gitlab服务器

简单记录Docker的使用和GitLab的搭建 ## Docker基础篇 ### 没有sudo权限 ### 安装docker ### 基础命令 ### docker安装mysql和配置 ### Dockerfile常用命令 ### 制作镜像 ### 发布镜像 ### 容器网络 ### Docker Compose ### Swarm模式 集群## 正式搭建...

Django之ORM正反向查询

Django之ORM正反向查询 在orm查询中,一般分为正向查询和反向查询。至于什么是正向查询和反向查询,还要从表关系说起。举个简单的例子,就拿图书和出版社来说,一般一个图书只有一个出版社,但是一个图书一般有多个图书,外键关系一般建立在多的一侧,也就是说,外键关系是建立在图书的表模型中的。而正向查询就是从多的一侧出发,即图书表出发去查找。举例如下:查找出版...

Django文件配置及orm

http协议 -特点:    1 基于TCP/IP协议之上的应用层协议    2 基于请求-响应模式    3 无状态保存    4 无连接 -请求头: 请求首行 get / http/1.1 key:value key:value 请求体的内容 -响...

用Django开发简单的POST/GET接口

前情提要: 搭建Django环境   https://www.cnblogs.com/littlemonsterksn/p/14347772.html 用Django创建一个项目   https://www.cnblogs.com/littlemonsterksn/p/14354684.html (接上) 一、开发POST接口 1. 在templates下...