我正在尝试使用 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