如何创建docker-compose.yml全局文件?

如何创建docker-compose.yml全局文件?,docker,docker-compose,Docker,Docker Compose,我有一个基本的docker设置。问题是这些端口与其他项目中已使用的端口冲突 例如,这个docker compose.yml为mysql使用端口3306:3306,但我已经在使用这个端口了 我可以将端口更改为其他端口,但我不想错误地提交这些更改,也不想忽略git中的这个文件,以防我确实需要对该功能进行一些永久性更改 是否存在覆盖当前文件的全局docker compose.yml文件?无论是针对单个项目还是针对所有项目 有什么想法吗?我想你可以使用docker compose.override.ym

我有一个基本的docker设置。问题是这些端口与其他项目中已使用的端口冲突

例如,这个
docker compose.yml
为mysql使用端口
3306:3306
,但我已经在使用这个端口了

我可以将端口更改为其他端口,但我不想错误地提交这些更改,也不想忽略git中的这个文件,以防我确实需要对该功能进行一些永久性更改

是否存在覆盖当前文件的全局
docker compose.yml
文件?无论是针对单个项目还是针对所有项目


有什么想法吗?

我想你可以使用
docker compose.override.yml

例如,如果您有两个如下所示的文件

# docker-compose.yml
web:
  ports:
    - 8883:80

运行
docker compose up
时,它将自动读取
docker compose.override.yml
以及
docker compose.yml
,然后它将使用端口
9999:80
覆盖
docker compose.yml
配置

(它将只覆盖
docker compose.override.yml
指定的内容,然后完整地使用
docker compose.yml

因此,通过创建
docker compose.override.yml
并在
git
中忽略它,您可以实现您想要的


有关更多详细信息,请参阅。

我认为您可以使用
docker compose.override.yml

例如,如果您有两个如下所示的文件

# docker-compose.yml
web:
  ports:
    - 8883:80

运行
docker compose up
时,它将自动读取
docker compose.override.yml
以及
docker compose.yml
,然后它将使用端口
9999:80
覆盖
docker compose.yml
配置

(它将只覆盖
docker compose.override.yml
指定的内容,然后完整地使用
docker compose.yml

因此,通过创建
docker compose.override.yml
并在
git
中忽略它,您可以实现您想要的


更详细地参阅.< /P> < P>当在同一台主机上运行多个DOCKER应用程序时,为了避免端口冲突,您可能需要考虑根本不使用固定端口。 如文所述:

因此,如果您想运行两个内部使用端口
3306
的Docker容器,那么这两个容器都会将此端口映射到主机上的随机可用端口(例如,第一个容器为
32775
,第二个容器为
32776

要找出使用了哪个外部端口,只需通过
docker ps-a
查找即可。要在自动化shell脚本中自动使用,请运行以下命令

container_id=docker-compose ps -q <service name as in docker-compose.yml file>
echo $(docker port "${container_id}" | cut -d: -f2)
container\u id=docker compose ps-q
echo$(docker端口“${container_id}”| cut-d:-f2)
或者,如果您知道内部端口并且它是固定的,您也可以运行

docker-compose port <service name as in docker-compose.yml file> <private port>
docker编写端口
每次删除和重新创建服务时,随机端口都会更改。如果这不是一个选项,例如,因为您需要固定URL与用户通信,下一步可能是在容器前面使用反向代理。这样,您就可以通过
我的服务.我的主机.某个域
我的主机/我的服务
等地址访问它们,无论哪个随机端口被暴露

我有一些很好的使用经验,它也很好地工作


如果你对这种方式感兴趣,网上有很多教程。

< P>当在同一台主机上运行多个DOCKER应用程序时,为了避免端口冲突,你可能会考虑根本不使用固定端口。 如文所述:

因此,如果您想运行两个内部使用端口
3306
的Docker容器,那么这两个容器都会将此端口映射到主机上的随机可用端口(例如,第一个容器为
32775
,第二个容器为
32776

要找出使用了哪个外部端口,只需通过
docker ps-a
查找即可。要在自动化shell脚本中自动使用,请运行以下命令

container_id=docker-compose ps -q <service name as in docker-compose.yml file>
echo $(docker port "${container_id}" | cut -d: -f2)
container\u id=docker compose ps-q
echo$(docker端口“${container_id}”| cut-d:-f2)
或者,如果您知道内部端口并且它是固定的,您也可以运行

docker-compose port <service name as in docker-compose.yml file> <private port>
docker编写端口
每次删除和重新创建服务时,随机端口都会更改。如果这不是一个选项,例如,因为您需要固定URL与用户通信,下一步可能是在容器前面使用反向代理。这样,您就可以通过
我的服务.我的主机.某个域
我的主机/我的服务
等地址访问它们,无论哪个随机端口被暴露

我有一些很好的使用经验,它也很好地工作

如果您有兴趣这样做,internet上有很多教程。

请参阅:请参阅: