0

我正在尝试使用 websocketpp 与用 C++ 编写的服务器建立 websocket连接。当它在我的计算机上运行时,我可以成功地与我的服务器建立连接,但是当它在我的本地计算机上的 Docker 容器中运行时,我无法与同一台服务器连接。

我花了一段时间在网上查找这个问题,似乎主要的痛点是听0.0.0.0而不是127.0.0.1,并且使用-p配置而不是EXPOSE在 Dockerfile 中。我认为我现在遵循这两条建议,但我仍然无法连接到端点。我很迷茫,所以我想我会在这里询问是否有其他人遇到类似的问题。

我的客户端看起来像这样(仅在浏览器中):

let ws = new WebSocket('ws://localhost:3001');

我的服务器如下所示:

websocketpp::server<websocketpp::config::asio> server_;

server_.clear_access_channels(
   websocketpp::log::alevel::frame_header | websocketpp::log::alevel::frame_payload
); 
server_.set_reuse_addr(true);
server_.init_asio();

server_.listen(port_); // port_ is set to 3001

server_.start_accept();
server_.run();

我的 Dockerfile 如下所示:

FROM gcc:latest

RUN set -ex; \
    apt-get -y update; \
    apt-get -y upgrade; \
    apt-get install -y cmake build-essential libboost-dev \
        libboost-system-dev libboost-thread-dev librange-v3-dev \
        libfmt-dev libprotobuf-dev protobuf-compiler \
        libwebsocketpp-dev libgtest-dev google-mock

# libgtest-dev only installs source files which need to be compiled -- actually compile them here
RUN cd /usr/src/googletest; \ 
    cmake .; \
    cmake --build . --target install 

COPY . /usr/src/mazer
WORKDIR /usr/src/mazer

RUN cd /usr/src/mazer;  \
    mkdir build;  \
    cd build; \
    cmake ..; \
    make

CMD exec "./build/mazer-server/mazer-server"

我正在使用以下命令启动容器:

docker run --rm -p 3001:3001 mazer-server
4

0 回答 0