我正在尝试使用 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
的链接失败”,我也尝试了许多不同的配置选项,但它总是工作不稳定,大约十次才编译一次
哦,我找到答案了!
这是一个问题,因为我的本地系统是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
文件夹链接,问题已解决