添加docker支持
Opened this issue · 12 comments
Dockerfile:
FROM ubuntu:latest
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
RUN apt update \
&& apt upgrade -y \
&& apt install -y gcc git make curl
RUN git clone --recursive https://github.com/heiher/natmap.git \
&& cd natmap \
&& make \
&& cp ./bin/natmap /opt/natmap
ENTRYPOINT ["/opt/natmap"]
构建镜像
docker build -f ./dockerfiles/natmap/Dockerfile -t natmap .
docker-compose.yml
natmap-wg:
container_name: natmap-wg
image: natmap
command: -u -s stun.qq.com -b 30101 -t 127.0.0.1 -p 51820 -e /opt/cf_ip4p.sh -k 60
volumes:
- ./natmap/cf_ip4p.sh:/opt/cf_ip4p.sh
cap_add:
- NET_ADMIN
- NET_RAW
environment:
- TZ=Asia/Shanghai
network_mode: host
restart: always
如果用python脚本的话,需要exec到容器内,再apt update && apt install python,其他的类似
Thanks. 不过有一些建议可以作为参考:
- 可以采用多阶段 (Multi-stage builds) 的方式构建,这样可以避免把整个 GCC 打进镜像里面,减少镜像体积;
- NATMap 目前还没有内置 iptables 转发(虽然我曾提过这个事),
NET_ADMIN
NET_RAW
这两个权限还暂时用不到。
@heiher 另外不知是否有构建 Docker 镜像的规划?如果有我可以帮忙提个 PR。
Thanks. 不过有一些建议可以作为参考:
1. 可以采用多阶段 (Multi-stage builds) 的方式构建,这样可以避免把整个 GCC 打进镜像里面,减少镜像体积; 2. NATMap 目前还没有内置 iptables 转发(虽然我曾提过这个事),`NET_ADMIN` `NET_RAW` 这两个权限还暂时用不到。
更新
FROM ubuntu:latest as builder
ENV LANG C.UTF-8
ENV LANGUAGE C.UTF-8
ENV LC_ALL C.UTF-8
RUN apt update \
&& apt upgrade -y \
&& apt install -y gcc git make curl \
&& git clone --recursive https://github.com/heiher/natmap.git \
&& cd natmap \
&& make \
&& cp ./bin/natmap /opt/natmap
FROM ubuntu:latest
RUN apt update \
&& apt upgrade -y \
&& apt install -y curl
COPY --from=builder /opt/natmap /opt/natmap
ENTRYPOINT ["/opt/natmap"]
感觉有些常用的命令也得加上去
@heiher 另外不知是否有构建 Docker 镜像的规划?如果有我可以帮忙提个 PR。
如果能提个PR就太好了~ 有没有可能直接根据arch下载发布页由github action构建出来的二进制?那样会不会依赖简单一些
不编译,直接下载最新Releases的对应架构文件到alpine镜像就行吧,做好启动脚本和对应环境变量就ok,这样体积应该非常小
放在docker中运行,会出现端口占用问题
放在docker中运行,会出现端口占用问题
具体是什么错误?可能需要给net_admin
的capability才行。
放在docker中运行,会出现端口占用问题
具体是什么错误?可能需要给
net_admin
的capability才行。
natmap-natmap-ssh-1 | [E] hev_sock_client_tcp src/hev-sock.c:167 Address in use
natmap-natmap-ssh-1 | [E] tnsk_run src/hev-tnsk.c:107 Start TCP keep-alive service failed.
natmap-natmap-ssh-1 | [E] hev_sock_client_tcp src/hev-sock.c:167 Address in use
natmap-natmap-ssh-1 | [E] tnsk_run src/hev-tnsk.c:107 Start TCP keep-alive service failed.
natmap-natmap-ssh-1 | [E] hev_sock_client_tcp src/hev-sock.c:167 Address in use
natmap-natmap-ssh-1 | [E] tnsk_run src/hev-tnsk.c:107 Start TCP keep-alive service failed.
natmap-natmap-ssh-1 | [E] hev_sock_client_tcp src/hev-sock.c:167 Address in use
natmap-natmap-ssh-1 | [E] tnsk_run src/hev-tnsk.c:107 Start TCP keep-alive service failed.
一直报这个打印
放在docker中运行,会出现端口占用问题
具体是什么错误?可能需要给
net_admin
的capability才行。
在宿主机执行过一次"natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 443 -e /opt/ddns.sh -k 60"命令之后,再启动docker就没问题,个人猜测是在docker内无法打开端口重用
放在docker中运行,会出现端口占用问题
具体是什么错误?可能需要给
net_admin
的capability才行。在宿主机执行过一次"natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 443 -e /opt/ddns.sh -k 60"命令之后,再启动docker就没问题,个人猜测是在docker内无法打开端口重用
很有可能,当docker容器没有授权net_admin
或privileged模式。如果监听443端口的服务没有重启过,在宿主机上执行过一次natmap后端口重用将持续有效。
放在docker中运行,会出现端口占用问题
具体是什么错误?可能需要给
net_admin
的capability才行。在宿主机执行过一次"natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 443 -e /opt/ddns.sh -k 60"命令之后,再启动docker就没问题,个人猜测是在docker内无法打开端口重用
很有可能,当docker容器没有授权
net_admin
或privileged模式。如果监听443端口的服务没有重启过,在宿主机上执行过一次natmap后端口重用将持续有效。
授权过net_admin或privileged模式了,问题还在,应该不是权限的问题。我看了端口重用的代码,docker容器实现隔离,pid也是隔离的,应该无法通过pid控制端口重用
放在docker中运行,会出现端口占用问题
具体是什么错误?可能需要给
net_admin
的capability才行。在宿主机执行过一次"natmap -4 -s stunserver.stunprotocol.org -h qq.com -b 443 -e /opt/ddns.sh -k 60"命令之后,再启动docker就没问题,个人猜测是在docker内无法打开端口重用
很有可能,当docker容器没有授权
net_admin
或privileged模式。如果监听443端口的服务没有重启过,在宿主机上执行过一次natmap后端口重用将持续有效。授权过net_admin或privileged模式了,问题还在,应该不是权限的问题。我看了端口重用的代码,docker容器实现隔离,pid也是隔离的,应该无法通过pid控制端口重用
正解。忘记这个细节了