最小的图像和派生主机名
我正在开发一个用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> ...
所有应该是好…