1. 程式人生 > >docker-compose volumes指令路徑映射問題

docker-compose volumes指令路徑映射問題

find volumes lib 構建 失誤 esql 創建 his red

背景:最近在自學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 命令

[[email protected] 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指令路徑映射問題