dockerfile如何将SQL Server作为本地主机公开?

按照microsoft / mssql-server-linux 页面上的文档,它提供了以下命令来运行Docker容器。

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Test!234' -p 1433:1433 -d --name sqllinux microsoft/mssql-server-linux

这工作正常,我可以打开SSMS并连接到localhost与凭据:

用户名:sa

密码:testing!234

之后我想要做的是创build一个Dockerfile ,它将创build图像,将执行相同的事情:

 FROM microsoft/mssql-server-linux ENV ACCEPT_EULA Y ENV SA_PASSWORD Test!234 EXPOSE 1433 1433 

然后我运行docker build . -t sqltestfile docker build . -t sqltestfile后面跟着docker run sqltestfile

容器似乎开始很好,通过Kitematic,我可以看到(看起来像我)与运行其他图像相同的输出,但我无法通过SSMS使用localhost连接到这个图像。

什么需要改变Dockerfile以我期望的方式工作(可以通过localhost使用SSMS连接到容器实例)?

任何帮助将不胜感激!

您仍然需要使用-p显式发布端口。 从文档 :

EXPOSE指令通知Docker在运行时侦听指定的networking端口。 您可以指定端口是侦听TCP还是UDP,如果未指定协议,则默认为TCP。

EXPOSE指令不实际发布端口。 它用作构build映像的人和运行容器的人之间的文档types,关于哪个端口打算发布。 要在运行容器时实际发布端口,请使用docker run上的-p标志来发布和映射一个或多个端口,或使用-P标志来发布所有公开的端口并将它们映射到高阶端口。