简体   繁体   English

Dockerode 中的错误 ERR_STREAM_WRITE_AFTER_END

[英]Error ERR_STREAM_WRITE_AFTER_END in Dockerode

I trigger some Docker containers with Dockerode from within a Node.js app.我从 Node.js 应用程序中使用 Dockerode 触发了一些 Docker 容器。 In some occasions in triggers the error: Error [ERR_STREAM_WRITE_AFTER_END]: write after end (see log below).在某些情况下会触发错误: Error [ERR_STREAM_WRITE_AFTER_END]: write after end (见下面的日志)。 Is there anything I am doing wrong?有什么我做错了吗?

Here is Docker run code:这是Docker运行代码:

// Create custom resolver to test data source
const triggerTestDataSourceContainer = () => {
    return async (resolve, source, args, context, resolveInfo) => {
        // [...]

        // Instantiate Docker
        var Docker = require("dockerode");
        var docker = new Docker({ socketPath: "/var/run/docker.sock" });

        // Run Docker container
        docker.run(
            "mobydq-scripts",
            ["python", "run.py", authorization, "test_data_source", dataSourceId.toString()],
            [process.stdout, process.stderr],
            { name: "mobydq-test-data-source-" + dataSourceId, Tty: false, HostConfig: { AutoRemove: true, NetworkMode: "mobydq_network" } },
            function(err, data, container) {
                // Do nothing
            }
        );

        return result;
    };
};

Here is the error:这是错误:

mobydq-graphql | events.js:180
mobydq-graphql |       throw er; // Unhandled 'error' event
mobydq-graphql |       ^
mobydq-graphql |
mobydq-graphql | Error [ERR_STREAM_WRITE_AFTER_END]: write after end
mobydq-graphql |     at writeAfterEnd (_stream_writable.js:250:14)
mobydq-graphql |     at Socket.Writable.write (_stream_writable.js:299:5)
mobydq-graphql |     at processData (/home/node/app/node_modules/docker-modem/lib/modem.js:354:18)
mobydq-graphql |     at IncomingMessage.processData (/home/node/app/node_modules/docker-modem/lib/modem.js:346:9)
mobydq-graphql |     at IncomingMessage.emit (events.js:203:13)
mobydq-graphql |     at addChunk (_stream_readable.js:295:12)
mobydq-graphql |     at readableAddChunk (_stream_readable.js:276:11)
mobydq-graphql |     at IncomingMessage.Readable.push (_stream_readable.js:210:10)
mobydq-graphql |     at HTTPParser.parserOnBody (_http_common.js:129:22)
mobydq-graphql |     at Socket.socketOnData (_http_client.js:449:22)
mobydq-graphql | Emitted 'error' event at:
mobydq-graphql |     at errorOrDestroy (internal/streams/destroy.js:107:12)
mobydq-graphql |     at writeAfterEnd (_stream_writable.js:252:3)
mobydq-graphql |     at Socket.Writable.write (_stream_writable.js:299:5)
mobydq-graphql |     [... lines matching original stack trace ...]
mobydq-graphql |     at HTTPParser.parserOnBody (_http_common.js:129:22)

Dockerode documentation about the docker.run() method is not very clear, in particular the syntax for create_options and start_options is pretty much not documented.关于docker.run()方法的 Dockerode 文档不是很清楚,特别是create_optionsstart_options的语法几乎没有记录。 https://github.com/apocas/dockerode#equivalent-of-docker-run-in-dockerode https://github.com/apocas/dockerode#equivalent-of-docker-run-in-dockerode

I guess I was doing something wrong with [process.stdout, process.stderr] and Tty: false argument.我想我在[process.stdout, process.stderr]Tty: false参数上做错了。 It seems the following changes fixed the issue.似乎以下更改解决了该问题。

const triggerTestDataSourceContainer = () => {
    return async (resolve, source, args, context, resolveInfo) => {
        // [...]

        // Instantiate Docker
        var Docker = require("dockerode");
        var docker = new Docker({ socketPath: "/var/run/docker.sock" });

        // Run Docker container
        docker.run(
            "mobydq-scripts",
            ["python", "run.py", authorization, "test_data_source", dataSourceId.toString()],
            process.stdout,
            { name: "mobydq-test-data-source-" + dataSourceId, HostConfig: { AutoRemove: true, NetworkMode: "mobydq_network" } }, // Start options
            function(err, data, container) {
                // Do nothing
            }
        );

        return result;
    };
};

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 错误 [ERR_STREAM_WRITE_AFTER_END]:结束后写入 - Error [ERR_STREAM_WRITE_AFTER_END]: write after end 错误 [ERR_STREAM_WRITE_AFTER_END]:在结束后写入 [npm-request with socket.io] - Error [ERR_STREAM_WRITE_AFTER_END]: write after end [npm-request with socket.io] 错误 [ERR_STREAM_WRITE_AFTER_END]:写在结束后,http 服务器 node.js - Error [ERR_STREAM_WRITE_AFTER_END]: write after end, http server node.js 代码:'ERR_HTTP_HEADERS_SENT'} 错误 - uncaughtException:错误 [ERR_STREAM_WRITE_AFTER_END]:结束后写入 - code: 'ERR_HTTP_HEADERS_SENT' } error - uncaughtException: Error [ERR_STREAM_WRITE_AFTER_END]: write after end 节点 JS:文件上传错误 [ERR_STREAM_WRITE_AFTER_END] - Node JS: File upload Error [ERR_STREAM_WRITE_AFTER_END] 为什么我在下载文件时收到错误“错误 [ERR_STREAM_WRITE_AFTER_END]: write after end”? - Why am I getting the error “Error [ERR_STREAM_WRITE_AFTER_END]: write after end” when downloading a file? ERR_STREAM_WRITE_AFTER_END 使用在 Node.js 上运行的 MySQL2 执行查询时 - ERR_STREAM_WRITE_AFTER_END when executing query with MySQL2 running on Node.js 我在节点js API中得到ERR_STREAM_WRITE_AFTER_END。 如何解决这个问题? - I am getting ERR_STREAM_WRITE_AFTER_END in node js api. How to fix this issue? 在结束流错误后写 - write after end stream error 错误:npm 错误! 在结束后写 - Error: npm ERR! write after end
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM