挑战访问容器化 DNS-SD

Posted

技术标签:

【中文标题】挑战访问容器化 DNS-SD【英文标题】:Challenged accessing containerized DNS-SD 【发布时间】:2021-03-10 14:08:45 【问题描述】:

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

以下作品:

    在主机上运行二进制文件和avahi-browse
./server

产量:

avahi-browse -all
+ enp5s0 IPv6 asto-dnssd                                    _rust._tcp           local
    在容器中手动运行二进制文件并在主机上运行avahi-browse
docker run .... --entrypoint=bash [[image]]
> service dbus start
> service avahi-daemon start
> ./service

还有:

+ docker0 IPv4 asto-dnssd                                    _rust._tcp           local
    在启动dbusavahi-daemon 后在子shell 中运行二进制文件:
docker run .... --entrypoint=bash [[image]]
> service dbus start
> service avahi-daemon start
> bash -c "./service"

但是,如果我在子 shell 中启动服务运行二进制文件,什么都不会:

docker run .... --entrypoint=bash [[image]]
> bash -c "service dbus start && service avahi-daemon start && ./service"

为什么会这样?

我有另一个使用 zeronconf 板条箱的示例,这样可以正常工作。

IIUC 我必须在容器映像中服务器之前启动dbusavahi-daemon,并且使用子shell 是正确的(!?)方法:

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"]

【问题讨论】:

【参考方案1】:

已解决:时机。

如果我在服务启动之间添加sleep,这似乎可以让系统有时间正常工作:

这不起作用:

(
  service dbus start
  service avahi-daemon start
  /release/astro-dnssd
)

但这确实:

(
  service dbus start
  service avahi-daemon start
  sleep 2s
  /release/astro-dnssd
)

【讨论】:

以上是关于挑战访问容器化 DNS-SD的主要内容,如果未能解决你的问题,请参考以下文章

有容云:微服务容器化的挑战和解决之道

实战训练营:传统分布式架构如何进行容器化升级

云原生大趋势下的容器化技术现状与发展

如何攻破容器持久化存储挑战?

容器化部署OpenStack的正确姿势

边缘计算容器化是否有必要?