最小的图像和派生主机名

我正在开发一个用C ++编写的游戏服务器。 我有它的工作,但想把它放入容器。 集装箱化的变体也在工作,但是,有些方面看起来很脆弱。

请注意,这是我第一次进入Docker,所以我相信Docker的方式对于我来说是相当不错的。

我已经做了一堆阅读和实验,但还没有确定我想要做什么是可行的。

我的理想状态是用scratch作为我的基本形象。 我有一个正在工作的版本。 这个Dockerfile看起来大致如下所示

 FROM scratch COPY ld-linux-x86-64.so.2 /lib64/ld-linux-x86-64.so.2 COPY libc.so.6 /lib/x86_64-linux-gnu/libc.so.6 COPY libdl.so.2 /lib/x86_64-linux-gnu/libdl.so.2 COPY libgcc_s.so.1 /lib/x86_64-linux-gnu/libgcc_s.so.1 COPY libm.so.6 /lib/x86_64-linux-gnu/libm.so.6 COPY libnss_dns.so.2 /lib/x86_64-linux-gnu/libnss_dns.so.2 COPY libnss_files.so.2 /lib/x86_64-linux-gnu/libnss_files.so.2 COPY libpthread.so.0 /lib/x86_64-linux-gnu/libpthread.so.0 COPY libstdc++.so.6 /usr/lib/x86_64-linux-gnu/libstdc++.so.6 COPY group /etc/group COPY passwd /etc/passwd COPY nsswitch.conf /etc/nsswitch.conf COPY jks-server /root/jks-server EXPOSE 8383 CMD [ "/root/jks-server/bin/jks-server", "--db_host=172.17.0.1", "--db_port=3307", "--host=172.17.0.3", "--resources_dir=/root/jks-server", "--env=testy" ] 

哪里

--host=172.17.03告诉服务器听哪个地址。

对我来说,问题是硬编码地址。 特别是172.17.0.3,这是容器的IP地址。 据我所知,这个地址可能会改变,取决于我已经运行。

理想情况下,我喜欢做这样的事情:

  CMD /root/jks-server/bin/jks-server --db_host=172.17.0.1 --db_port=3307 --host=`hostname -i` --resources_dir=/root/jks-server --env=testy 

如果我使用ubuntu:16.04作为基本映像,这将起作用。 但是,图像尺寸也大得多。

有没有办法让我导出容器的IP地址还可以使用scratch? 还是硬编码中央?

我知道我可以做的另一个select是,也可以听取所有内容(0.0.0.0),但如果不必这样做,我真的不想这样做。 最初我以为它不会那么糟糕,因为我可以通过docker run的端口标志( -p )定义入站IP地址。

例如,绑定到0.0.0.0(– --host=0.0.0.0 )时,我可以运行容器

sudo docker run --rm --name jks-server-runtime -p 192.168.1.11:8383:8383 -d jks-server-runtime

在这种情况下,192.168.1.11是我目前在本地networking上为这个特定testing服务器指定的静态IP。

如果我的技术很糟糕,请让我知道。 我在这里学习。

谢谢!

只要您在--net=bridge模式下运行映像(我相信它是默认的..),如果容器(映像运行时)绑定到localhost您可以将容器端口3307转发到运行时的主机端口3307参数docker run -p 3307:3007 <image_name> ...所有应该是好…