如何在服务器代码中使用Docker端口

时间:2019-06-11 09:31:41

标签: docker docker-compose port

我有用于网络的Docker映像和用于服务器的另一个映像。 我的服务器使用特定的端口,我在服务器和Web中对其进行了硬编码。我还在docker-compose文件中定义了此端口。

我认为正确的方法是仅在docker-compose.yml中指定端口,然后以某种方式在服务器和Web的代码中使用此端口,而不是在三个不同的地方对该端口进行硬编码。

我应该在docker-compose.yml中使用环境变量吗?最好的解决方案是什么?

2 个答案:

答案 0 :(得分:0)

Docker Compose支持Env files,它允许您声明所有环境变量。然后,您可以替换端口号using one of the env variables

env文件通常是一个好习惯,因为在切换到另一个环境(例如开发与生产)时,可以很容易地将其换出,您可以通过以下方式即时设置值命令行,紧接在运行代码之前。

对于许多支持读取这些文件的编程语言,都有不错的库,例如Dotenv for Node.js

答案 1 :(得分:0)

根据我的经验,最好让服务器选择自己的“正常”端口并在Docker领域中出现的地方进行硬编码。

假设我有一个服务器进程,也许是我用Go编写的,我决定它要在端口12345上监听。然后:

  • 通常的Go约定是服务器采用可选的命令行参数,例如-bind 0.0.0.0:12345来指定进程的绑定地址和端口,但我将其保留为默认值Docker容器。

  • 我用于服务器的Dockerfile将会EXPOSE 12345,主要是作为文档。

  • 对于客户端,我将明确拥有一个选项-server_url http://server:12345,也可以通过环境变量SERVER_URL=http://server:12345进行设置。默认设置可能是指向localhost,以实现最简单的面向开发人员的设置。

  • 在我的docker-compose.yml中,我必须在服务器的ports:块的右侧(如果有的话)和客户端的{{1 }}。

    SERVER_URL

请注意,version: '3' services: server: build: ./server ports: ['12345:12345'] client: build: ./client environment: SERVER_URL: 'http://server:12345' ports: ['24680:24680'] 可选,如果您不想从Docker外部连接到后端服务,则不需要它。还要注意,端口不必相同,并且在可能的情况下最好使用“普通”端口。如果服务器使用普通的HTTP端口80,则无需在客户端URL中明确提及它。