最小图像和派生主机名



我正在开发用C 编写的游戏服务器。我有工作,但想将其放入容器中。但是,容器化的变体也起作用,但是,它似乎有些方面看起来很脆弱。

请注意,这是我第一次涉足Docker,所以我敢肯定,当涉及到Docker的方式时,我很沮丧。

我已经完成了一堆阅读和实验,但还没有确定我想做的事情是否可行。

我理想化的状态是将scratch用作我的基本图像。我有一个正在工作的版本。码头的码头看起来大致像以下

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地址WHIST仍然可以使用刮擦?还是硬码中心?

我知道我可以做的另一种选择也是聆听所有内容(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是我目前在本地网络上为此特定测试服务器指定的静态IP。

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

谢谢!

如果您以--net=bridge模式运行图像(我认为是默认值..),则如果容器(Image Runtime)绑定到localhost,则可以将容器端口3307转发至带有运行时参数docker run -p 3307:3007 <image_name> ...的主机端口CC_11,一切都很好...

最新更新