我有下面的代码配置 Dockerfile:
# Builder Stage
FROM rust:1.76.0 as builder
ENV SQLX_OFFLINE=true
# Create a new Rust project
RUN USER=root cargo new --bin jwt
WORKDIR /jwt/
# Copy and build dependencies
COPY Cargo.toml Cargo.lock ./entity/Cargo.toml ./
RUN cargo build --release --locked
RUN rm src/*.rs
# Copy the source code and build the application
COPY . .
RUN cargo build --release --locked
# Production Stage
FROM debian:buster-slim
ARG APP=/usr/src/app
RUN apt-get update \
&& apt-get install -y ca-certificates tzdata \
&& rm -rf /var/lib/apt/lists/*
ENV TZ=Etc/UTC \
APP_USER=appuser
RUN groupadd $APP_USER \
&& useradd -g $APP_USER $APP_USER \
&& mkdir -p ${APP}
COPY --from=builder /jwt/ ${APP}/jwt
RUN chown -R $APP_USER:$APP_USER ${APP}
USER $APP_USER
WORKDIR ${APP}
ENTRYPOINT ["./jwt"]
EXPOSE 8000
docker-compose.yml 在这里:
version: '3'
services:
api-rust:
image: username/api-rust
container_name: api-rust
restart: unless-stopped
environment:
DATABASE_URL: ${DATABASE_URL}
JWT_SECRET_KEY: ${TOKEN}
JWT_MAXAGE: ${JWT_MAXAGE}
build:
context: .
dockerfile: Dockerfile
networks:
- rust_app_network
postgres:
image: postgres:13
container_name: postgres
environment:
POSTGRES_USER: ${POSTGRES_USER}
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
POSTGRES_DB: ${POSTGRES_DB}
volumes:
- postgres:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-h", "postgres", "-U", "${POSTGRES_USER}"]
interval: 5s
timeout: 5s
retries: 5
networks:
- rust_app_network
pgadmin:
image: dpage/pgadmin4
container_name: pgadmin
environment:
PGADMIN_DEFAULT_EMAIL: ${PGADMIN_DEFAULT_EMAIL}
PGADMIN_DEFAULT_PASSWORD: ${PGADMIN_DEFAULT_PASSWORD}
PGADMIN_LISTEN_PORT: ${PGADMIN_LISTEN_PORT}
volumes:
- pgadmin-data:/var/lib/pgadmin
restart: always
depends_on:
- postgres
networks:
- rust_app_network
volumes:
postgres:
pgadmin-data:
networks:
rust_app_network:
当我运行“docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d”时
有问题:
来自守护进程的错误响应:无法为容器创建任务:无法创建 shim 任务:OCI 运行时创建失败:runc 创建失败:无法启动容器进程:exec:“./jwt”:stat ./jwt:没有这样的文件或目录:未知
您要运行的二进制文件是什么?
COPY --from=builder /jwt/ ${APP}/jwt
因为你这样复制,所以你必须知道你要执行哪个文件。 例如
/jwt/somefile
是你要执行的文件
ENTRYPOINT ["./jwt"]
->
ENTRYPOINT ["./jwt/somefile"]