我正在尝试创建一个带有rails项目的docker:
这是我的 dockerfile:
FROM ruby:3.1.2-slim
RUN apt-get update -qq && apt-get install -yq --no-install-recommends \
build-essential \
gnupg2 \
less \
git \
libpq-dev \
postgresql-client \
libvips42 \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
ENV LANG=C.UTF-8 \
BUNDLE_JOBS=4 \
BUNDLE_RETRY=3
RUN gem update --system && gem install bundler
WORKDIR /usr/src/app
ENTRYPOINT ["sh", "./entrypoint.sh"]
EXPOSE 3001
CMD ["bundle", "exec", "rails", "s", "-b", "0.0.0.0"]
这是我的入口点.sh
#!/bin/bash
set -e
# Remove a potentially pre-existing server.pid for Rails.
rm -f /usr/src/app/tmp/pids/server.pid
echo "bundle install..."
bundle check || bundle install --jobs 4
# Then exec the container's main process (what's set as CMD in the Dockerfile).
exec "$@"
我还添加了权限权限
-rwxr-xr-x 1 vitat staff 274 22 Mar 16:02 entrypoint.sh
当我运行:docker-compose up -d我收到此错误:
Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "./entrypoint.sh": stat ./entrypoint.sh: no such file or directory: unknown
我做错了什么?
正如错误所示,当尝试启动容器时,Docker 无法在路径
entrypoint.sh
处找到 ./entrypoint.sh
。最可能的原因是执行 entrypoint.sh
指令时,ENTRYPOINT
脚本不在 Docker 预期的位置。
因此请确保它与 Dockerfile 位于同一目录中并包含在 Docker 映像中。尝试对您的 Dockerfile 进行以下更改:
WORKDIR /usr/src/app
# Copy the entrypoint script into the container at /usr/src/app
COPY entrypoint.sh /usr/src/app/
RUN chmod +x /usr/src/app/entrypoint.sh
ENTRYPOINT ["sh", "./entrypoint.sh"]
确保在进行这些更改后使用
docker-compose build
重建 Docker 映像,然后再次运行 docker-compose up -d
。