在部署容器之前,如何在我的Dockerfile中包含--net = host?

时间:2019-08-13 10:03:32

标签: docker dockerfile

我是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浏览器中的应用。

1 个答案:

答案 0 :(得分:0)

关于您的第一个问题:

  

在部署容器之前,如何在我的Dockerfile中包含--net = host?

不能。影响主机的运行时选项(例如网络附件,卷安装等)不能包含在Dockerfile中。这是一个安全限制:如果我可以诱使您运行默认情况下以某种方式运行--net=host的映像,那么我可以做各种令人讨厌的事情。

如果您的应用程序需要这样的选项才能有用,并且您厌倦了键入长的docker run命令行(或者希望其他人更容易使用),则可以使用docker-compose之类的工具,并创建一个docker-compose.yml来指定所有适当的运行时选项。