Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux Docker容器已退出,退出代码为2“;sh can';t打开&x27;启动脚本.sh';:没有这样的文件或目录;_Linux_Docker_Docker Compose_Dockerfile - Fatal编程技术网

Linux Docker容器已退出,退出代码为2“;sh can';t打开&x27;启动脚本.sh';:没有这样的文件或目录;

Linux Docker容器已退出,退出代码为2“;sh can';t打开&x27;启动脚本.sh';:没有这样的文件或目录;,linux,docker,docker-compose,dockerfile,Linux,Docker,Docker Compose,Dockerfile,我有以下Dockerfile用于启动Django服务器: FROM python:3.7.4-alpine3.10 LABEL maintainer = ****** ENV PYTHONUNBUFFERED 1S ENV RUNNING_IN_DOCKER True RUN apk add --update --no-cache build-base postgresql-client exiftool jpeg-dev zlib-d

我有以下Dockerfile用于启动Django服务器:

    FROM python:3.7.4-alpine3.10
    LABEL maintainer = ******
    
    ENV PYTHONUNBUFFERED 1S
    ENV RUNNING_IN_DOCKER True
    
    RUN apk add --update --no-cache build-base postgresql-client exiftool jpeg-dev zlib-dev gettext git openssl
    RUN apk add --update --no-cache gcc libc-dev linux-headers postgresql-dev file-dev py-magic libffi-dev libxml2-dev
    
    COPY ./requirements.txt /requirements.txt
    RUN pip install -r /requirements.txt
    
    RUN mkdir /app
    
    WORKDIR /app
    
    CMD sh start_script.sh
以及以下docker-compose.yml:

版本:“3”
服务:
后端:
生成:。
重新启动:始终
端口:
- 127.0.0.1:****:****
环境文件:
-环境署署长
环境:&应用程序环境
-POSTGRES_HOST=db
-POSTGRES_PORT=${POSTGRES_PORT}
-POSTGRES_DB=${POSTGRES_DB}
-POSTGRES_USER=${POSTGRES_USER}
-POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
-REDIS_HOST=REDIS
-REDIS_PORT=${REDIS_PORT}
取决于:&app dep
-分贝
-雷迪斯
卷:&应用程序卷
-/应用
db:
图片:postgres:10
重新启动:始终
端口:
-${POSTGRES_PORT}:****
环境:
-POSTGRES_DB=${POSTGRES_DB}
-POSTGRES_USER=${POSTGRES_USER}
-POSTGRES_PASSWORD=${POSTGRES_PASSWORD}
卷数:
-${LOCAL\u POSTGRES\u DB\u DATA}:/var/lib/postgresql/DATA
redis:
图片:redis:5-10
命令:[“redis server”、“--appendonly”、“yes”]
重新启动:除非停止
端口:
-${REDIS_PORT}:****
卷数:
-${LOCAL\u REDIS\u DATA}:/DATA
当我尝试运行它时,我在docker compose日志中得到以下输出:

    Attaching to api_backend_1, api_redis_1, api_db_1
    backend_1  | sh: can't open 'start_script.sh': No such file or directory
    backend_1  | sh: can't open 'start_script.sh': No such file or directory
    backend_1  | sh: can't open 'start_script.sh': No such file or directory
    backend_1  | sh: can't open 'start_script.sh': No such file or directory
    backend_1  | sh: can't open 'start_script.sh': No such file or directory
    backend_1  | sh: can't open 'start_script.sh': No such file or directory
    db_1       | 
    db_1       | PostgreSQL Database directory appears to contain a database; Skipping initialization
    db_1       | 
    db_1       | 2020-09-25 09:14:20.936 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port ****
    db_1       | 2020-09-25 09:14:20.936 UTC [1] LOG:  listening on IPv6 address "::", port ****
    db_1       | 2020-09-25 09:14:20.945 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
    db_1       | 2020-09-25 09:14:20.965 UTC [20] LOG:  database system was shut down at 2020-09-25 09:14:10 UTC
    db_1       | 2020-09-25 09:14:20.970 UTC [1] LOG:  database system is ready to accept connections
    redis_1    | 1:C 25 Sep 2020 09:14:20.818 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
    redis_1    | 1:C 25 Sep 2020 09:14:20.818 # Redis version=5.0.9, bits=64, commit=00000000, modified=0, pid=1, just started
    redis_1    | 1:C 25 Sep 2020 09:14:20.818 # Configuration loaded
    redis_1    | 1:M 25 Sep 2020 09:14:20.819 * Running mode=standalone, port=****.
    redis_1    | 1:M 25 Sep 2020 09:14:20.819 # Server initialized
    redis_1    | 1:M 25 Sep 2020 09:14:20.819 # WARNING overcommit_memory is set to 0! Background save may fail under low memory condition. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.
    redis_1    | 1:M 25 Sep 2020 09:14:20.819 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
    redis_1    | 1:M 25 Sep 2020 09:14:20.819 * Ready to accept connections
    api_backend_1 exited with code 2
    api_backend_1 exited with code 2
这是文件结构:

/ git_repository
| - /app
| - requirements.txt
| - Dockerfile
| - docker-compose.yml
| - start_script.sh PERMISSIONS: -rwxrwxr-x 1 ubuntu ubuntu   208 Sep 25 08:11
奇怪的是,我们有另一个服务,它具有完全相同的Dockerfile和结构,可以正常工作

我能找到的唯一错误是在Dockerfile中,在运行
start\u script.sh
之前,workingdir被更改为
/app
,但将run命令更改为
CMD sh../start\u script.sh
并没有更改错误。requirements.txt的副本对我来说也没有意义,但我认为这与这个错误无关

在搜索过程中,我遇到了一些问题,但这种解决方法对我也不起作用


我不知道如何从这里开始,或者如何进一步调试,是否有人看到了错误或有我可以尝试的提示?

根据我对问题的评论,我使用了
docker compose run backend sh
来检查我的容器。事实证明,我确实没有将任何源代码或start_script.sh复制到我的容器中。我对Dockerfile进行了更改以使其正常工作:

FROM python:3.7.4-alpine3.10
LABEL maintainer = ******

ENV PYTHONUNBUFFERED 1S
ENV RUNNING_IN_DOCKER True

RUN apk add --update --no-cache build-base postgresql-client exiftool jpeg-dev zlib-dev gettext git openssl
RUN apk add --update --no-cache gcc libc-dev linux-headers postgresql-dev file-dev py-magic libffi-dev libxml2-dev

RUN mkdir /app
COPY ./start_script.sh /app/start_script.sh.      --------> Copy the start_script.sh
COPY ./requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

COPY . /app                                       --------> Copy the source code
WORKDIR /app

CMD sh start_script.sh

根据对我问题的评论,我使用了
docker compose run backend sh
来检查我的容器。事实证明,我确实没有将任何源代码或start_script.sh复制到我的容器中。我对Dockerfile进行了更改以使其正常工作:

FROM python:3.7.4-alpine3.10
LABEL maintainer = ******

ENV PYTHONUNBUFFERED 1S
ENV RUNNING_IN_DOCKER True

RUN apk add --update --no-cache build-base postgresql-client exiftool jpeg-dev zlib-dev gettext git openssl
RUN apk add --update --no-cache gcc libc-dev linux-headers postgresql-dev file-dev py-magic libffi-dev libxml2-dev

RUN mkdir /app
COPY ./start_script.sh /app/start_script.sh.      --------> Copy the start_script.sh
COPY ./requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

COPY . /app                                       --------> Copy the source code
WORKDIR /app

CMD sh start_script.sh

使用WORKDIR,您可以更改以下CMD语句的工作目录。查看start_script.sh是否不在/app目录中。您必须指定一个路径,以便CMD/start_script.sh可以工作。但你为什么要更改WORKDIR呢?它看起来不像是你将脚本或任何源代码复制到图像中,这会产生错误。您是否尝试过使用类似于
docker compose run backend sh
的工具查看容器中的交互式shell,以查看实际存在的内容?@urfin78谢谢,我会尝试一下。我不知道为什么要更改workdir,我在部署之前接管了这个项目。我正在查看django dockerfiles,看看它是否是django特有的东西。@DavidMaze谢谢!我将尝试获取一个交互式shell,以查看发生了什么。我是docker的新手,所以我不知道这是一个选择!我在获取有关发生了什么的信息时遇到了问题,但这似乎是一个很好的尝试选项。查看start_script.sh是否不在/app目录中。您必须指定一个路径,以便CMD/start_script.sh可以工作。但你为什么要更改WORKDIR呢?它看起来不像是你将脚本或任何源代码复制到图像中,这会产生错误。您是否尝试过使用类似于
docker compose run backend sh
的工具查看容器中的交互式shell,以查看实际存在的内容?@urfin78谢谢,我会尝试一下。我不知道为什么要更改workdir,我在部署之前接管了这个项目。我正在查看django dockerfiles,看看它是否是django特有的东西。@DavidMaze谢谢!我将尝试获取一个交互式shell,以查看发生了什么。我是docker的新手,所以我不知道这是一个选择!我很难获得关于正在发生的事情的信息,但这似乎是一个很好的尝试选择。