我已经构建了我的 docker 映像来在本地运行 HTTPS Node.js 服务器,其中包含所有必需且配置良好的 TLS 证书:
...
var port = config.port || 9010, https;
var tlsOptions = {
pfx: fs.readFileSync('./tls/keystore.p12'),
passphrase: ******,
honorCipherOrder: true,
secureOptions: constants.SSL_OP_NO_SSLv2 | constants.SSL_OP_NO_SSLv3
};
try {
https = require('https').Server(tlsOptions, app);
} catch (e) {
console.error('Fail to start HTTPS server ' + e);
}
...
我已经使用curl
成功地在容器内部和主机中测试了它。
我现在将发布容器https://localhost:9010
与 docker 主机https://localhost:9010
绑定的容器。我使用了以下命令:
docker container run --publish 9010:9010 --detach --name https_server_container https_server:1.0
当我从 docker 的主机(我的本地机器(运行 curlhttps://localhost:9010
时,我收到此错误:
curl: (35) schannel: failed to receive handshake, SSL/TLS connection failed
我试图遵循 docker 文档保护 Docker 守护程序套接字,但什么都没有。
我应该遵循哪些步骤才能正确发布容器中的 https 节点服务器?
谢谢
在我看来,docker 命令有一些错别字:
docker container run --publish 9010:9010 --detach --name https_server_container https_server:1.0
你需要在 9010 和 --detach 之间空格 ( (
如 David Maze 所示,我将 Node.js 在 docker 容器中运行的服务器的服务器主机从127.0.0.1
更改为0.0.0.0
。
...
https.listen(port, '0.0.0.0', function() {
...
});
通过这种方式,我现在可以通过 https://localhost:9010/从我的 docker 主机访问 docker 容器中的服务器。