首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问容器化DNS-SD的挑战

访问容器化DNS-SD的挑战
EN

Stack Overflow用户
提问于 2020-11-27 20:08:12
回答 1查看 140关注 0票数 0

我是一个ZeroConf (和Rust)菜鸟,当代码在子subshell中运行时,我很难理解为什么我不能访问基于astro-dnssd示例的服务。

以下工作:

  1. 在主机上运行二进制和avahi-browse

代码语言:javascript
复制
./server

产量:

代码语言:javascript
复制
avahi-browse -all
+ enp5s0 IPv6 asto-dnssd                                    _rust._tcp           local

  1. 手动运行容器中的二进制文件,在主机上运行avahi-browse

代码语言:javascript
复制
docker run .... --entrypoint=bash [[image]]
> service dbus start
> service avahi-daemon start
> ./service

和:

代码语言:javascript
复制
+ docker0 IPv4 asto-dnssd                                    _rust._tcp           local

启动avahi-daemon和后,在子subshell中运行二进制文件的

代码语言:javascript
复制
docker run .... --entrypoint=bash [[image]]
> service dbus start
> service avahi-daemon start
> bash -c "./service"

但是,如果启动子subshell 中的服务,运行二进制文件,则不会:

代码语言:javascript
复制
docker run .... --entrypoint=bash [[image]]
> bash -c "service dbus start && service avahi-daemon start && ./service"

为什么会这样?

我还有另一个使用zeronconf机箱的例子,这种方法工作得很好。

IIUC I必须在容器映像dbusavahi-daemon中启动,然后才是服务器,使用子subshell是正确的(!?)方法:

代码语言:javascript
复制
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"]
EN

回答 1

Stack Overflow用户

发布于 2020-11-30 18:41:30

解决了:时机问题。

如果我在服务启动之间添加了一个sleep,这似乎给了系统正确工作的时间:

这不管用:

代码语言:javascript
复制
(
  service dbus start
  service avahi-daemon start
  /release/astro-dnssd
)

但这确实是:

代码语言:javascript
复制
(
  service dbus start
  service avahi-daemon start
  sleep 2s
  /release/astro-dnssd
)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65043317

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档