使用cargo-watch和docker compose在工作区运行Rust项目时出错

问题描述 投票:0回答:1

我正在尝试使用 Cargo-Watch 和 docker-compose 为 Rust 项目设置开发环境和工作区。这是我的配置:

主要

Cargo.toml

[workspace]
resolver = "2"

members = [
    "lib_bot",
]

docker-compose.yml

version: '3.8'

services:
  lib_bot:
    build:
      dockerfile: ./Dockerfile
    container_name: lib_bot
    env_file:
      - ./.env
    volumes:
      - cargo_registry_lib_bot:/usr/local/cargo/registry
      - ./lib_bot/src:/app/lib_bot/src
      - ./lib_bot/Cargo.toml:/app/lib_bot/Cargo.toml
      - ./target:/app/target
      - ./Cargo.lock:/app/Cargo.lock
      - ./Cargo.toml:/app/Cargo.toml

volumes:
  cargo_registry_lib_bot: {}

Dockerfile

FROM rust:1.76.0

# Install required dependencies to solve the problem "linking with `cc` failed"
RUN apt-get update && \
    apt-get install -y \
        libssl-dev \
        pkg-config \
        libclang-dev \
        llvm-dev \
        && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app

# Install cargo-watch
RUN cargo install cargo-watch

COPY ./Cargo.lock ./Cargo.lock
COPY ./Cargo.toml ./Cargo.toml

COPY ./lib_bot/src ./librium_bot/src
COPY ./lib_bot/Cargo.toml ./lib_bot/Cargo.toml

RUN cargo clean
RUN cargo build

CMD ["cargo", "watch", "-x", "run", "-p", "lib_bot"]

但是这个配置在重新编译时会导致新的类似错误:

error: could not write output to /app/target/debug/deps/lib_bot-ba0cae4639db1016.2s99ixstsj1t5hnk.rcgu.o: No such file or directory

如您所见,我将目标文件夹与本地文件夹链接起来,当我检查时,所有文件夹都存在,但错误不断发生。有时,一切都编译正确。我不知道为什么会发生......请帮忙

我尝试了 ChantGPT 寻求帮助,它帮助我解决了类似的问题“与

cc
的链接失败”,我也尝试了许多不同的配置选项,但它总是工作不稳定,大约十次才编译一次

docker rust docker-compose dockerfile rust-cargo
1个回答
0
投票

哦,我找到答案了!

这是一个问题,因为我的本地系统是MacOS,docker容器是Linux,当我链接

target
文件夹时,似乎本地MacOS正在尝试并行更改
target
文件夹(不知道为什么) .

因此,修复看起来像

docker-compose.yml
文件中的此更改:

version: '3.8'

services:
  lib_bot:
    build:
      dockerfile: ./Dockerfile
    container_name: lib_bot
    env_file:
      - ./.env
    volumes:
      - cargo_registry_lib_bot:/usr/local/cargo/registry
      - ./lib_bot/src:/app/lib_bot/src
      - ./lib_bot/Cargo.toml:/app/lib_bot/Cargo.toml
      - /app/target
      - ./Cargo.lock:/app/Cargo.lock
      - ./Cargo.toml:/app/Cargo.toml

volumes:
  cargo_registry_lib_bot: {}

本地文件夹不再与

target
文件夹链接,问题已解决

© www.soinside.com 2019 - 2024. All rights reserved.