docker-compose sh命令的“无此类文件或目录”

mec1mxoz  于 2022-11-28  发布在  Docker
关注(0)|答案(6)|浏览(399)

我正在我的个人电脑上设置docker-for-windows
当我设置它前一段时间在我的办公室笔记本电脑上,我有同样的问题,但它只是停止发生。
所以我被困在这个问题上:
我有一个docker-working项目(在我的另一台计算机上),它的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

停靠文件:

### 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"]

停靠撰写.环境:

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

运行_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时,得到以下错误:
网页_1|/运行_web_本地.sh:无此文件或目录

  • 我检查了行尾,它们是UNIX
  • 文件存在于文件系统和容器中
  • 我可以从我的windows powershell和容器内部调用bash run_web_local.sh
  • 我更改了容器内的UNIX权限
  • 我在docker-compose命令中省略了command中的bash,并尝试使用反斜杠,没有点等。
  • 我重新安装了Docker
  • 我尝试切换到版本3
  • Docker声称与我的共享驱动器C有连接

而且:完全相同的设置工作在我的另一台笔记本电脑上。
有什么想法吗?所有的200万个github帖子并没有为我解决这个问题。
谢谢你!

更新

从docker-compose中删除volumes:,使它可以工作like stated here,但我没有即时Map。这对我来说很重要...

thtygnil

thtygnil1#

我最近遇到了同样的问题,使用任何高级编辑器和在sh入口点脚本上将行尾更改为unix样式,问题就消失了。
就我而言,不知道为什么,因为git可以很好地处理它,这取决于linux或windows主机,我最终也遇到了同样的情况。(在windows中)这取决于你如何编辑它们,可能会从容器内部更改为linux,但这会影响到windows主机外部。之后,git声明文件.sh更改,但没有添加,没有删除。一个图形比较工具显示了唯一被改变新行。
另一个解决问题的方法是,例如,你可以通过sh启动你的容器覆盖入口点脚本,然后从那里你可以检查启动的容器如何看到入口点脚本,甚至你可以测试它,并将看到完全相同的错误。

kqhtkvqz

kqhtkvqz2#

在克隆系统信息库之前,应发出以下命令:

git config --global core.autocrlf false

这会将行尾更改为UNIX样式。
然后克隆存储库并继续。

xqkwcwgp

xqkwcwgp3#

可能是因为bash文件不在根路径或workdir的根路径中,请检查它在容器中的位置,并验证路径是否正确。

t30tvxxf

t30tvxxf4#

如果可能的话,你可以请提供所有与此相关的文件,以便我可以尝试重现的问题。
似乎未执行的命令是run_web_local. sh所在的目录。
您可以通过将docker-compose.yml中的command替换为command: pwd && bash ./run_web_local.sh来检查当前工作目录

qc6wkl3g

qc6wkl3g5#

我注意到在Ubuntu 18.04.3中,你需要在www.example.com上安装docker.iodocker-compose来让它工作

  • 安装docker.io
  • sudo apt安装停靠合成

在我这样做之后,我让docker-compose [filename.yml]正常工作

cclgggtu

cclgggtu6#

不要在结尾使用-d。请使用docker-compose -f start_tools.yaml up -d代替此命令,使用docker-compose -f start_tools.yaml up

相关问题