可在 docker-compose.yml 中为 mysql 和 wordpress 设置端口

Port available to set in docker-compose.yml for mysql and wordpress

我有一个应用程序,我可以在其中创建多个 wordpress 项目,每个项目都带有 docker-compose.yml 文件以启动本地 wordpress 环境。

我设置:

mysql: 端口: - 8081:3306

wordpress 端口: - 8080:80

我希望每个项目都有一个唯一的端口配置,以便在我需要时允许启动所有项目,或者不使用已使用的端口和 return 一个错误。

那么,mysql 和 wordpress 可以使用哪些端口范围?

你知道这是可能的还是一个坏主意?

谢谢

完全有可能!诀窍是只指定容器内部的端口。然后,当 docker-compose 启动时,它会自动分配一个主机端口映射到内部容器端口。

例如,如果您这样定义 docker-compose.yaml:

version: '3'
services:
    mysql:
        image: mysql
        ports:
            - 3306
        environment:
            - MYSQL_ROOT_PASSWORD=badpassworddontdothis
    wordpress:
        image: wordpress
        ports:
            - 80

和运行docker-compose up,我们可以看看分配的端口映射:

❯ docker-compose ps
        Name                      Command               State                 Ports
--------------------------------------------------------------------------------------------------
67077886_mysql_1       docker-entrypoint.sh mysqld      Up      0.0.0.0:55362->3306/tcp, 33060/tcp
67077886_wordpress_1   docker-entrypoint.sh apach ...   Up      0.0.0.0:55361->80/tcp

这表明您可以在主机端口 55362 上访问 mysql 容器,在端口 55361 上访问 wordpress。

如果您需要以编程方式获取给定服务的公开端口,您可以 运行:

❯ docker-compose port wordpress 80
0.0.0.0:55361

你会得到 ip/port 对,这将允许你与 wordpress 容器端口 80 通信:

❯ curl -v $(docker-compose port wordpress 80)
*   Trying 0.0.0.0...
* TCP_NODELAY set
* Connected to 0.0.0.0 (127.0.0.1) port 55361 (#0)
> GET / HTTP/1.1
> Host: 0.0.0.0:55361
> User-Agent: curl/7.64.1
> Accept: */*
>
< HTTP/1.1 302 Found
< Date: Tue, 13 Apr 2021 20:09:03 GMT
< Server: Apache/2.4.38 (Debian)
< X-Powered-By: PHP/7.4.16
< Location: http://0.0.0.0:55361/wp-admin/setup-config.php
< Content-Length: 0
< Content-Type: text/html; charset=UTF-8
<
* Connection #0 to host 0.0.0.0 left intact
* Closing connection 0

(302是因为我没有真正设置wordpress,但它仍然是服务器的响应所以它很重要)。