docker-为 sh 命令编写 "No such file or directory"
docker-compose "No such file or directory" for sh-command
我正在我的私人电脑上设置 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: No such file or directory
- 我检查了行尾,它们是 UNIX
- 文件存在于文件系统和容器中
- 我可以从我的 windows powershell 和容器内部调用
bash run_web_local.sh
- 我更改了容器内的 UNIX 权限
- 我在
docker-compose
命令的 command
中省略了 bash
。并尝试使用反斜杠、无点等
- 我重装了docker
- 我尝试切换到版本 3
- docker 声称连接到我的共享驱动器 C
并且:完全相同的设置 在我的另一台笔记本电脑上工作 。
有什么想法吗?两百万 github 个帖子都没有解决我的问题。
谢谢!
更新
从 docker-compose 中删除 volumes:
使其工作 like stated here 但我没有即时映射。这对我来说很重要...
可能是因为bash文件不在根路径或者workdir的根路径下。
检查它在容器中的什么位置,并验证路径是否正确。
如果可能,请提供与此相关的所有文件,以便我可以尝试重现该问题。
似乎命令没有执行是 run_web_local.sh 所在的目录。
您可以通过将 docker-compose.yml 中的命令替换为
command: pwd && bash ./run_web_local.sh
我最近遇到了同样的问题,使用任何高级编辑器并在 sh 入口点脚本上将行结尾更改为 unix 样式,问题就消失了。
就我而言,不知道为什么,因为 git 根据 linux 或 windows 主机处理得很好 我最终遇到了同样的情况。
如果您在容器和主机中安装了文件(windows)
这取决于您如何编辑它们可能会从容器内部更改为 linux,但这会影响外部 windows 主机。
在那之后 git 声明文件 .sh 已更改但没有添加也没有删除。
图形比较工具显示只有新行发生了变化。
解决问题的另一种解决方法您可以通过 sh 启动容器覆盖的入口点脚本,然后从那里您可以检查启动的容器 linux 如何看到入口点脚本,甚至您可以测试它和将看到完全相同的错误
对不起我的英语,不是我的母语。
希望这对某人有所帮助。
我在 Ubuntu 18.04.3 中注意到,您需要在 docker.io 之上安装 docker-compose 才能使 docker-compose 正常工作
- sudo apt 安装docker.io
- sudo apt install docker-compose
在我这样做之后,我 docker-compose [filename.yml] 可以正常工作了
您应该在克隆存储库之前发出以下命令:
git config --global core.autocrlf false
这会将行尾更改为 UNIX 样式。
然后克隆存储库并继续。
不要在最后使用-d。
而不是这个命令
docker-compose -f start_tools.yaml up –d
采用
docker-compose -f start_tools.yaml向上
我正在我的私人电脑上设置 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: No such file or directory
- 我检查了行尾,它们是 UNIX
- 文件存在于文件系统和容器中
- 我可以从我的 windows powershell 和容器内部调用
bash run_web_local.sh
- 我更改了容器内的 UNIX 权限
- 我在
docker-compose
命令的command
中省略了bash
。并尝试使用反斜杠、无点等 - 我重装了docker
- 我尝试切换到版本 3
- docker 声称连接到我的共享驱动器 C
并且:完全相同的设置 在我的另一台笔记本电脑上工作 。
有什么想法吗?两百万 github 个帖子都没有解决我的问题。
谢谢!
更新
从 docker-compose 中删除 volumes:
使其工作 like stated here 但我没有即时映射。这对我来说很重要...
可能是因为bash文件不在根路径或者workdir的根路径下。 检查它在容器中的什么位置,并验证路径是否正确。
如果可能,请提供与此相关的所有文件,以便我可以尝试重现该问题。
似乎命令没有执行是 run_web_local.sh 所在的目录。
您可以通过将 docker-compose.yml 中的命令替换为
command: pwd && bash ./run_web_local.sh
我最近遇到了同样的问题,使用任何高级编辑器并在 sh 入口点脚本上将行结尾更改为 unix 样式,问题就消失了。
就我而言,不知道为什么,因为 git 根据 linux 或 windows 主机处理得很好 我最终遇到了同样的情况。 如果您在容器和主机中安装了文件(windows) 这取决于您如何编辑它们可能会从容器内部更改为 linux,但这会影响外部 windows 主机。 在那之后 git 声明文件 .sh 已更改但没有添加也没有删除。 图形比较工具显示只有新行发生了变化。
解决问题的另一种解决方法您可以通过 sh 启动容器覆盖的入口点脚本,然后从那里您可以检查启动的容器 linux 如何看到入口点脚本,甚至您可以测试它和将看到完全相同的错误
对不起我的英语,不是我的母语。 希望这对某人有所帮助。
我在 Ubuntu 18.04.3 中注意到,您需要在 docker.io 之上安装 docker-compose 才能使 docker-compose 正常工作
- sudo apt 安装docker.io
- sudo apt install docker-compose
在我这样做之后,我 docker-compose [filename.yml] 可以正常工作了
您应该在克隆存储库之前发出以下命令:
git config --global core.autocrlf false
这会将行尾更改为 UNIX 样式。
然后克隆存储库并继续。
不要在最后使用-d。 而不是这个命令 docker-compose -f start_tools.yaml up –d 采用 docker-compose -f start_tools.yaml向上