我正在开发用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,一切都很好...