在我的 Docker 图像中安装了一个本地目录,但它无法从该目录读取文件
Mounted a local direcotry in my Docker image, but it can't read a file from that directory
我正在尝试使用 MySql、Django 和 Apache 图像构建一个 docker 容器。我已经设置了这个 docker-compose.yml ...
version: '3'
services:
mysql:
restart: always
image: mysql:5.7
environment:
MYSQL_DATABASE: 'maps_data'
# So you don't have to use root, but you can if you like
MYSQL_USER: 'chicommons'
# You can use whatever password you like
MYSQL_PASSWORD: 'password'
# Password for root access
MYSQL_ROOT_PASSWORD: 'password'
ports:
- "3406:3306"
volumes:
- my-db:/var/lib/mysql
command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
web:
restart: always
build: ./web
ports: # to access the container from outside
- "8000:8000"
env_file: .env
environment:
DEBUG: 'true'
command: /usr/local/bin/gunicorn maps.wsgi:application --reload -w 2 -b :8000
volumes:
- ./web/:/app
depends_on:
- mysql
apache:
restart: always
build: ./apache/
ports:
- "9090:80"
links:
- web:web
volumes:
my-db:
我想将我的 docker Django 图像挂载到我本地机器上的一个目录,这样本地编辑可以反映在 docker 容器中,这就是为什么我有这个
volumes:
- ./web/:/app
在我的 "web" 部分。这是我正在使用的 web/Dockerfile ...
FROM python:3.7-slim
RUN apt-get update && apt-get install
RUN apt-get install -y libmariadb-dev-compat libmariadb-dev
RUN apt-get update \
&& apt-get install -y --no-install-recommends gcc \
&& rm -rf /var/lib/apt/lists/*
RUN python -m pip install --upgrade pip
WORKDIR /app/
COPY requirements.txt requirements.txt
RUN python -m pip install -r requirements.txt
RUN ["chmod", "+x", "/app/entrypoint.sh"]
ENTRYPOINT ["/app/entrypoint.sh"]
但是,当我 运行 使用 "docker-compose up," 时,我得到这个错误...
chmod: cannot access '/app/entrypoint.sh': No such file or directory
即使当我查看我的本地目录时,我也可以看到文件...
localhost:maps davea$ ls -al web/entrypoint.sh
-rw-r--r-- 1 davea staff 99 Mar 9 15:23 web/entrypoint.sh
我觉得我 mapped/mounted 事情不对,但不确定问题出在哪里。
看来您的 docker-compose
和 Dockerfiles
设置正确。
但是,我注意到的一件事是,您的入口点 ENTRYPOINT ["/app/entrypoint.sh"]
正在执行文件 /app/entrypoint.sh
,根据 ls -al
命令,您无权这样做
-rw-r--r-- 1 davea staff 99 Mar 9 15:23 web/entrypoint.sh
对此有 2 个简单的解决方案:
- 授予
entrypoint.sh
文件执行权限:
chmod a+x web/entrypoint.sh
- 或者如果您不想授予此权限,您可以将您的入口点更新为
ENTRYPOINT ["bash", "/app/entrypoint.sh"]
请注意,无论哪种情况,这都不是 docker-compose
安装的问题,而是 Dockerfile
的问题,因此,您需要在制作 docker 映像后重建 docker 映像变化如
docker-compose up -d --build
我正在尝试使用 MySql、Django 和 Apache 图像构建一个 docker 容器。我已经设置了这个 docker-compose.yml ...
version: '3'
services:
mysql:
restart: always
image: mysql:5.7
environment:
MYSQL_DATABASE: 'maps_data'
# So you don't have to use root, but you can if you like
MYSQL_USER: 'chicommons'
# You can use whatever password you like
MYSQL_PASSWORD: 'password'
# Password for root access
MYSQL_ROOT_PASSWORD: 'password'
ports:
- "3406:3306"
volumes:
- my-db:/var/lib/mysql
command: ['mysqld', '--character-set-server=utf8mb4', '--collation-server=utf8mb4_unicode_ci']
web:
restart: always
build: ./web
ports: # to access the container from outside
- "8000:8000"
env_file: .env
environment:
DEBUG: 'true'
command: /usr/local/bin/gunicorn maps.wsgi:application --reload -w 2 -b :8000
volumes:
- ./web/:/app
depends_on:
- mysql
apache:
restart: always
build: ./apache/
ports:
- "9090:80"
links:
- web:web
volumes:
my-db:
我想将我的 docker Django 图像挂载到我本地机器上的一个目录,这样本地编辑可以反映在 docker 容器中,这就是为什么我有这个
volumes:
- ./web/:/app
在我的 "web" 部分。这是我正在使用的 web/Dockerfile ...
FROM python:3.7-slim
RUN apt-get update && apt-get install
RUN apt-get install -y libmariadb-dev-compat libmariadb-dev
RUN apt-get update \
&& apt-get install -y --no-install-recommends gcc \
&& rm -rf /var/lib/apt/lists/*
RUN python -m pip install --upgrade pip
WORKDIR /app/
COPY requirements.txt requirements.txt
RUN python -m pip install -r requirements.txt
RUN ["chmod", "+x", "/app/entrypoint.sh"]
ENTRYPOINT ["/app/entrypoint.sh"]
但是,当我 运行 使用 "docker-compose up," 时,我得到这个错误...
chmod: cannot access '/app/entrypoint.sh': No such file or directory
即使当我查看我的本地目录时,我也可以看到文件...
localhost:maps davea$ ls -al web/entrypoint.sh
-rw-r--r-- 1 davea staff 99 Mar 9 15:23 web/entrypoint.sh
我觉得我 mapped/mounted 事情不对,但不确定问题出在哪里。
看来您的 docker-compose
和 Dockerfiles
设置正确。
但是,我注意到的一件事是,您的入口点 ENTRYPOINT ["/app/entrypoint.sh"]
正在执行文件 /app/entrypoint.sh
,根据 ls -al
命令,您无权这样做
-rw-r--r-- 1 davea staff 99 Mar 9 15:23 web/entrypoint.sh
对此有 2 个简单的解决方案:
- 授予
entrypoint.sh
文件执行权限:
chmod a+x web/entrypoint.sh
- 或者如果您不想授予此权限,您可以将您的入口点更新为
ENTRYPOINT ["bash", "/app/entrypoint.sh"]
请注意,无论哪种情况,这都不是 docker-compose
安装的问题,而是 Dockerfile
的问题,因此,您需要在制作 docker 映像后重建 docker 映像变化如
docker-compose up -d --build