首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker-为sh命令撰写“无此类文件或目录”

docker-为sh命令撰写“无此类文件或目录”
EN

Stack Overflow用户
提问于 2018-06-30 09:17:28
回答 6查看 26K关注 0票数 8

我正在我的私人电脑上设置docker-for-windows

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

所以我被困在这:

我有一个码头工作项目(在我的另一台计算机上),它的docker-compose.yml是这样的:

代码语言:javascript
复制
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

文档:

代码语言:javascript
复制
### 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:

代码语言:javascript
复制
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:

代码语言:javascript
复制
#!/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 _web_local.sh:没有这样的文件或目录

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

而且:在我的另一台笔记本电脑上,完全相同的设置可以工作

有什么想法吗?所有两百万的github帖子并没有为我解决这个问题。

谢谢!

更新

volumes:从停靠组合中移除使其工作就像这里所说的,但我没有即时映射。这对我来说很重要..。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2019-05-28 20:58:25

最近我也遇到了同样的问题,使用任何高级编辑器并在sh entrypoint脚本上将行更改为unix样式,问题就消失了。

在我的例子中,不知道为什么,因为git能够很好地处理它,这取决于linux或windows主机。如果您在容器和主机( windows)中挂载了文件,这取决于您如何从容器内部将它们修改为linux,但这会影响到外部windows主机。在此之后,git声明的文件.sh改变了,但没有添加,没有删除。一个图形比较工具显示只有新行发生了变化。

另一个解决问题的方法--您可以通过sh启动容器覆盖入口点脚本--然后从这里可以检查已启动的容器如何查看linux如何看待入口点脚本,甚至可以测试它并看到完全相同的错误。

票数 5
EN

Stack Overflow用户

发布于 2020-12-28 11:43:37

在克隆存储库之前,您应该发出以下命令:

代码语言:javascript
复制
git config --global core.autocrlf false

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

然后克隆存储库并继续。

票数 3
EN

Stack Overflow用户

发布于 2018-06-30 09:21:33

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51113531

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档