我是一个ZeroConf (和Rust)菜鸟,当代码在子subshell中运行时,我很难理解为什么我不能访问基于astro-dnssd示例的服务。
以下工作:
avahi-browse:./server产量:
avahi-browse -all
+ enp5s0 IPv6 asto-dnssd _rust._tcp localavahi-browse:docker run .... --entrypoint=bash [[image]]
> service dbus start
> service avahi-daemon start
> ./service和:
+ docker0 IPv4 asto-dnssd _rust._tcp local启动avahi-daemon和后,在子subshell中运行二进制文件的
docker run .... --entrypoint=bash [[image]]
> service dbus start
> service avahi-daemon start
> bash -c "./service"但是,如果启动子subshell 和中的服务,运行二进制文件,则不会:
docker run .... --entrypoint=bash [[image]]
> bash -c "service dbus start && service avahi-daemon start && ./service"为什么会这样?
我还有另一个使用zeronconf机箱的例子,这种方法工作得很好。
IIUC I必须在容器映像dbus和avahi-daemon中启动,然后才是服务器,使用子subshell是正确的(!?)方法:
ARG PROJECT=astro-dnssd
FROM rustlang/rust:nightly-slim as builder
ARG PROJECT
RUN apt update && \
apt install -y libavahi-compat-libdnssd-dev
RUN USER=root cargo new --bin ${PROJECT}
WORKDIR /${PROJECT}
COPY ./Cargo.toml ./Cargo.toml
RUN cargo build --release
RUN rm src/*.rs
ADD . ./
# Replace hyphens with underscores in ${PROJECT}
RUN rm ./target/release/deps/$(echo ${PROJECT} | tr '-' '_')*
RUN cargo build --release
FROM debian:buster-slim as runtime
ARG PROJECT
WORKDIR /bin
# Copy from builder and rename to 'server'
COPY --from=builder /${PROJECT}/target/release/${PROJECT} ./server
RUN apt update \
&& apt install -y \
libavahi-compat-libdnssd-dev \
&& rm -rf /var/lib/apt/lists/*
RUN mkdir -p /var/run/dbus
ENTRYPOINT ["bash", "-c", "service dbus start && service avahi-daemon start && ./server"]发布于 2020-11-30 18:41:30
解决了:时机问题。
如果我在服务启动之间添加了一个sleep,这似乎给了系统正确工作的时间:
这不管用:
(
service dbus start
service avahi-daemon start
/release/astro-dnssd
)但这确实是:
(
service dbus start
service avahi-daemon start
sleep 2s
/release/astro-dnssd
)https://stackoverflow.com/questions/65043317
复制相似问题