最小图像和派生主机名

时间:2017-09-27 00:11:10

标签: docker dockerfile

我正在开发一个用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地址惠斯特仍能使用划痕?或者它是硬编码中心?

我知道我能做的另一个选择是听一切(0.0.0.0),但如果我不需要,我真的不想这样做。最初我认为它不会那么糟糕,因为我可以通过-p上的端口标志(docker run)定义入站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是我当前在本地网络上为此特定测试服务器指定的静态IP。

如果我的技术很糟糕,请告诉我。我在这里学习。

谢谢!

1 个答案:

答案 0 :(得分:0)

只要您在--net=bridge模式下运行图像(我认为是默认值),如果容器(图像运行时)绑定到localhost,您可以转发容器端口{{ 1}}到运行时参数3307的主机端口3307,一切都应该不错......