docker-compose sh-命令的“没有这样的文件或目录”

问题描述 投票:0回答:7

我正在我的私人电脑上设置

docker-for-windows

当我不久前在办公室笔记本电脑上设置它时,我遇到了同样的问题,但它就不再发生了。

所以我坚持这个:

我有一个 docker 工作项目(在我的另一台计算机上),其

docker-compose.yml
如下所示:

version: '2'

services:
  web:
    depends_on:
      - db
    build: .
    env_file: ./docker-compose.env
    command: bash ./run_web_local.sh
    volumes:
      - .:/srv/project
    ports:
      - 8001:8001
    links:
      - db
      - rabbit
    restart: always

Dockerfile:

### STAGE 1: Build ###

# We label our stage as 'builder'
FROM node:8-alpine as builder

RUN npm set progress=false && npm config set depth 0 && npm cache clean --force

# build backend
ADD package.json /tmp/package.json
ADD package-lock.json /tmp/package-lock.json
RUN cd /tmp && npm install
RUN mkdir -p /backend-app && cp -a /tmp/node_modules /backend-app

### STAGE 2: Setup ###
FROM python:3

# Install Python dependencies
COPY requirements.txt /tmp/requirements.txt
RUN pip3 install -U pip
RUN pip3 install --no-cache-dir -r /tmp/requirements.txt

# Set env variables used in this Dockerfile (add a unique prefix, such as DOCKYARD)
# Local directory with project source
ENV PROJECT_SRC=.
# Directory in container for all project files
ENV PROJECT_SRVHOME=/srv
# Directory in container for project source files
ENV PROJECT_SRVPROJ=/srv/project

# Create application subdirectories
WORKDIR $PROJECT_SRVPROJ
RUN mkdir media static staticfiles logs

# make folders available for other containers
VOLUME ["$PROJECT_SRVHOME/media/", "$PROJECT_SRVHOME/logs/"]

# Copy application source code to SRCDIR
COPY $PROJECT_SRC $PROJECT_SRVPROJ

COPY --from=builder /backend-app/node_modules $PROJECT_SRVPROJ/node_modules

# Copy entrypoint script into the image
WORKDIR $PROJECT_SRVPROJ

# EXPOSE port 8000 to allow communication to/from server
EXPOSE 8000

CMD ["./run_web.sh"]

docker-compose.env:

C_FORCE_ROOT=True
DJANGO_CELERY_BROKER_URL=amqp://admin:mypass@rabbit:5672//
DJANGO_DATABASE_ENGINE=django.db.backends.mysql
DJANGO_DATABASE_NAME=project-db
DJANGO_DATABASE_USER=project-user
DJANGO_DATABASE_PASSWORD=mypassword
DJANGO_DATABASE_HOST=db
DJANGO_ALLOWED_HOSTS=127.0.0.1,localhost
DJANGO_DEBUG=True
DJANGO_USE_DEBUG_TOOLBAR=off
DJANGO_TEST_RUN=off
PYTHONUNBUFFERED=0

run_web_local.sh:

#!/bin/bash
echo django shell commands
python ./manage.py migrate
echo Starting django server on 127.0.0.1:8000
python ./manage.py runserver 127.0.0.1:8000

当我致电

docker-compose up web
时,我收到以下错误:

web_1 | bash: ./run_web_local.sh: 没有这样的文件或目录

  • 我检查了行结尾,它们是UNIX
  • 文件存在于文件系统以及容器内部
  • 我可以从我的 Windows powershell 和容器内部调用
    bash run_web_local.sh
  • 我更改了容器内的 UNIX 权限
  • 我在
  • bash
     命令中的 
    command
     中省略了 
    docker-compose
    。并尝试使用反斜杠,不使用点等。
  • 我重新安装了docker
  • 我尝试切换到版本 3
  • docker 声称已连接到我的共享驱动器 C
并且:在我的另一台笔记本电脑上

可以使用完全相同的设置。 有什么想法吗?所有 200 万个 github 帖子都没有解决我的问题。

谢谢!

更新

从 docker-compose 中删除

volumes:

使其可以工作

如此处所述
,但我没有即时映射。这对我来说很重要...

docker docker-compose docker-for-windows
7个回答
8
投票

就我而言,不知道为什么,因为 git 根据 Linux 或 Windows 主机很好地处理它,我最终遇到了同样的情况。 如果您在容器和主机中安装了文件(在Windows中) 这取决于您如何编辑它们,可能会从容器内部更改为 linux,但这会影响外部 Windows 主机。 之后 git 表示文件 .sh 发生了更改,但没有添加也没有删除。 图形比较工具显示只有新行发生了变化。

解决问题的另一种解决方法是,您可以通过 sh 启动容器覆盖入口点脚本,然后从那里您可以检查启动的容器 linux 如何看待入口点脚本,即使您可以测试它,也会看到完全相同的错误。


4
投票

git config --global core.autocrlf false

这会将行尾更改为 UNIX 样式。

然后克隆存储库并继续。


2
投票

似乎命令未执行是 run_web_local.sh 存在的目录。

您可以通过将 docker-compose.yml 中的命令替换为来检查当前的工作目录

command: pwd && bash ./run_web_local.sh

    


1
投票


1
投票

sudo apt install docker.io
  • sudo apt install docker-compose
  • 完成此操作后,我让 docker-compose [filename.yml] 正常工作


0
投票

事实证明,Docker 对于可安装驱动器的行为有点有趣,具体来说,如果您的驱动器未在启动时安装(即通过 fstab),则尽管仍在启动,容器可能无法找到其中的文件。确保您的驱动器在启动时安装,并可能将其类型(如果其

ntfs

等)更改为 ext4 或更多 Linux 风格的东西,这应该会修复它。 如果问题仍然存在并且您已安装驱动器,则可能需要通过“虚拟文件共享”来允许它 - 这可以通过 Docker Desktop 通过

设置 > 资源 > 文件共享

并添加文件夹来完成您的文件位于“虚拟文件共享”部分。纯粹通过命令行执行此操作的详细信息似乎很模糊,所以我不确定这是否完全可能...... 不要在末尾使用-d。 而不是这个命令

docker-compose -f start_tools.yaml up –d

-1
投票
docker-compose -f start_tools.yaml 向上

© www.soinside.com 2019 - 2024. All rights reserved.