zoukankan      html  css  js  c++  java
  • docker-compose volumes指令路径映射问题

    背景:最近在自学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)

    项目目录结构:

    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 允许问题

    我就想这既然把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 - 从入门到实践》

    转载于:https://www.cnblogs.com/xingphimo/p/10769775.html

  • 相关阅读:
    Spring中 @PathVariable
    消息队列中点对点与发布订阅区别
    rabbitMQ下载地址
    当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
    String和StringBuilder、StringBuffer的区别?
    char 型变量中能不能存贮一个中文汉字,为什么?
    抽象类(abstract class)和接口(interface)有什么异同?
    静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
    抽象的(abstract)方法是否可同时是静态的(static),是否可同时是本地方法(native),是否可同时被synchronized修饰?
    阐述静态变量和实例变量的区别。
  • 原文地址:https://www.cnblogs.com/twodog/p/12134886.html
Copyright © 2011-2022 走看看