如何在 dockerfile 中创建端口转发

isb*_*isb 5 docker

我正在需要端口 8080 的 docker 容器上安装应用程序

为了从主机转发到容器,我已经启动了容器:

docker run -p 8080:8080 "image id" 
Run Code Online (Sandbox Code Playgroud)

我可以使用以下地址通过浏览器访问 docker 容器内的应用程序:

docker_parent_host:8080

我需要看到这样的容器端口:

docker port 7d04524erte

3306/tcp -> 0.0.0.0:3306
80/tcp -> 0.0.0.0:80
8080/tcp -> 0.0.0.0:8080
Run Code Online (Sandbox Code Playgroud)

我试图在 dockerfile 中使用暴露,但没有给我相同的结果,它给了我:

80/tcp
Run Code Online (Sandbox Code Playgroud)

我怎样才能在 dockerfile 中获得与提到 -p 8080 相同的端口转发的定义?

Att*_*tie 6

如何获得与提及相同的 Dockerfile 中端口转发的定义-p 8080

你不能...

使用 Dockerfile,您只能将端口公开给主机(即:使用EXPOSE)-您也不能自动转发它。

-P(或--publish-all)选项将转发所有的EXPOSE“d端口给你,但是这仍然是不一定理想,因为它会使用这个主机接口随机端口(使用docker port ${CONTAINER}来检查)。


但是,您可以使用Docker Compose使其自动化。

例如,您可能有以下内容docker-compose.yml

version: '2'
services:
    myservice:
        restart: "no"

        build: .

        ports:
            - 8080:8080/tcp
Run Code Online (Sandbox Code Playgroud)

然后运行docker-compose up -d myservice