standard_init_linux.go:211: exec 用户进程导致 "no such file or directory"?
standard_init_linux.go:211: exec user process caused "no such file or directory"?
Docker 文件
FROM python:3.7.4-alpine
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV LANG C.UTF-8
MAINTAINER "mail@gmail.com"
RUN apk update && apk add postgresql-dev gcc musl-dev
RUN apk --update add build-base jpeg-dev zlib-dev
RUN pip install --upgrade setuptools pip
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
#CMD ["gunicorn", "--log-level=DEBUG", "--timeout 90", "--bind", "0.0.0.0:8000", "express_proj.wsgi:application"]
ENTRYPOINT ["./docker-entrypoint.sh"]
docker-entrypoint.sh
#!/bin/bash
# Prepare log files and start outputting logs to stdout
touch /code/gunicorn.log
touch /code/access.log
tail -n 0 -f /code/*.log &
# Start Gunicorn processes
echo Starting Gunicorn.
exec gunicorn express_proj.wsgi:application \
--name express \
--bind 0.0.0.0:8000 \
--log-level=info \
--log-file=/code/gunicorn.log \
--access-logfile=/code/access.log \
--workers 2 \
--timeout 90 \
"$@"
获取错误
standard_init_linux.go:211: exec 用户进程导致“没有这样的文件或目录”
需要帮忙。
有人说用dos2unix(我不知道怎么用)
脚本开头的 "shebang" 行说明了使用什么解释器 运行 它。在您的情况下,您的脚本指定了 #!/bin/bash
,但基于 Alpine 的 Docker 图像通常不包含 GNU bash;相反,他们有一个更小的 /bin/sh
,其中仅包含 POSIX shell 规范中的功能。
您的脚本未使用任何非标准 bash 扩展,因此您只需将脚本的开头更改为
#!/bin/sh
如果脚本的行尾错误,也会发生这种情况,即 \r\n
而不是 \r
这可以使用 file path/to/script.sh
命令检查,该命令告诉脚本是否有 CR-LF
行结尾
如果它是一次性脚本 dos2unix 可用于将其更改为 \r\n
至 \n
如果它是一个 git 存储库,将 autocrlf
选项设置为 input
会起作用
How to change line-ending settings
Docker 文件
FROM python:3.7.4-alpine
ENV PYTHONUNBUFFERED 1
ENV PYTHONDONTWRITEBYTECODE 1
ENV LANG C.UTF-8
MAINTAINER "mail@gmail.com"
RUN apk update && apk add postgresql-dev gcc musl-dev
RUN apk --update add build-base jpeg-dev zlib-dev
RUN pip install --upgrade setuptools pip
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
COPY . /code/
#CMD ["gunicorn", "--log-level=DEBUG", "--timeout 90", "--bind", "0.0.0.0:8000", "express_proj.wsgi:application"]
ENTRYPOINT ["./docker-entrypoint.sh"]
docker-entrypoint.sh
#!/bin/bash
# Prepare log files and start outputting logs to stdout
touch /code/gunicorn.log
touch /code/access.log
tail -n 0 -f /code/*.log &
# Start Gunicorn processes
echo Starting Gunicorn.
exec gunicorn express_proj.wsgi:application \
--name express \
--bind 0.0.0.0:8000 \
--log-level=info \
--log-file=/code/gunicorn.log \
--access-logfile=/code/access.log \
--workers 2 \
--timeout 90 \
"$@"
获取错误 standard_init_linux.go:211: exec 用户进程导致“没有这样的文件或目录” 需要帮忙。 有人说用dos2unix(我不知道怎么用)
脚本开头的 "shebang" 行说明了使用什么解释器 运行 它。在您的情况下,您的脚本指定了 #!/bin/bash
,但基于 Alpine 的 Docker 图像通常不包含 GNU bash;相反,他们有一个更小的 /bin/sh
,其中仅包含 POSIX shell 规范中的功能。
您的脚本未使用任何非标准 bash 扩展,因此您只需将脚本的开头更改为
#!/bin/sh
如果脚本的行尾错误,也会发生这种情况,即 \r\n
而不是 \r
这可以使用 file path/to/script.sh
命令检查,该命令告诉脚本是否有 CR-LF
行结尾
如果它是一次性脚本 dos2unix 可用于将其更改为 \r\n
至 \n
如果它是一个 git 存储库,将 autocrlf
选项设置为 input
会起作用
How to change line-ending settings