我是Docker和网络概念的初学者。我的virtualbox中有一个经过码头处理的应用程序。我正在另一台计算机上连接MySQL。
我能够连接到该应用程序,然后使用--net=host
选项从我的虚拟盒子中查看该应用程序。据我了解,该选项同时映射了docker和virtualbox计算机的网络,这就是为什么我能够在我的virtualbox浏览器中看到它的原因。
我应该在Dockerfile中进行任何更改以确保连接正常吗?不管部署成功与否,在部署后如何测试?我当前的Dockerfile仅包含RUN命令以安装必要的软件。
我的困惑由此产生。如果说我部署了这个(Azure)(也开始部署),那么我应该映射/暴露哪个端口/地址以确保应用在部署后也能正常工作?目前,它是一个烧瓶应用程序,正在127.0.0.1
地址上运行。但是我应该更改Dockerfile中的任何内容吗?
Dockerfile
FROM python:3.6.3
COPY . /app
WORKDIR /app
RUN apt update && \
apt install -y gcc g++ gfortran git patch wget && \
apt install -y vim-tiny && \
pip install --upgrade pip && \
pip install -r requirements.txt && \
cd / && \
wget http://download.redis.io/releases/redis-5.0.5.tar.gz && \
tar xzf redis-5.0.5.tar.gz && \
cd redis-5.0.5 && \
make && \
# make test && \
cd / && \
rm redis-5.0.5.tar.gz && \
cd / && \
wget https://www.coin-or.org/download/source/Ipopt/Ipopt-3.12.13.tgz && \
tar xvzf Ipopt-3.12.13.tgz && \
cd Ipopt-3.12.13/ThirdParty/Blas/ && \
./get.Blas && \
cd ../Lapack && \
./get.Lapack && \
cd ../Mumps && \
./get.Mumps && \
cd ../Metis && \
./get.Metis && \
cd ../../ && \
mkdir build && \
cd build && \
../configure && \
make -j 4 && \
make install && \
cd / && \
rm Ipopt-3.12.13.tgz
当前,我运行
sudo docker run -it --net=host 5h71 /bin/bash
python app.py # inside the container
### which gives
Running on http://127.0.0.1:8050/
Debugger PIN: 052-293-642
* Serving Flask app "server" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
Running on http://127.0.0.1:8050/
Debugger PIN: 671-290-156
然后我访问127.0.0.1:8050
以访问我的Chrome浏览器中的应用。
答案 0 :(得分:0)
关于您的第一个问题:
在部署容器之前,如何在我的Dockerfile中包含--net = host?
不能。影响主机的运行时选项(例如网络附件,卷安装等)不能包含在Dockerfile中。这是一个安全限制:如果我可以诱使您运行默认情况下以某种方式运行--net=host
的映像,那么我可以做各种令人讨厌的事情。
如果您的应用程序需要这样的选项才能有用,并且您厌倦了键入长的docker run
命令行(或者希望其他人更容易使用),则可以使用docker-compose之类的工具,并创建一个docker-compose.yml
来指定所有适当的运行时选项。