MikroTik Solutions

Changes To Container Limitations
Login

Changes To Container Limitations

Changes to "Container Limitations" between 2025-05-28 18:35:39 and 2025-05-28 18:53:19

181
182
183
184
185
186
187
188



189
190
191
192
193
194
195

196
197

198
199
200
201
202
203
204
181
182
183
184
185
186
187

188
189
190
191
192
193
194
195
196

197
198

199
200
201
202
203
204
205
206







-
+
+
+






-
+

-
+







The thing is, Docker _was_ designed around this sensibility.

It is for this inherent reason that `container.npk` cannot provide equivalents of Docker’s `attach` command, nor its “`docker run --attach`” flag, nor the common “`docker run -it`” option pair. The closest it comes to all this is its [`shell`](#shell) command implementation, which can connect your local terminal to a true remote Linux terminal subsystem. Alas, that isn’t a close “`run -it`” alternative because you’re left typing commands at this remote shell, not at the container’s `ENTRYPOINT` process. Even then, it doesn’t always work since a good many containers lack a `/bin/sh` program inside the container in the first place, on purpose, typically to reduce the container’s attack surface.(^Indeed, all of [my public containers](https://hub.docker.com/repositories/tangentsoft) elide the shell for this reason.)


# <a id="logs"></a>Log Handling

Although Docker logging is tied into this same Linux terminal I/O design, we cannot blame the lack of an equivalent to “`docker logs`” on the RouterOS design principles in the same manner as [above](#terminal). The cause here is different, stemming first from the fact that RouterOS boxes try to keep logging to a minimum by default, whereas Docker logs everything the container says, without restriction. RouterOS takes the surprising default of logging to volatile RAM in order to avoid burning out the flash. Additionally, it ignores all messages issued under “topics” other than the four preconfigured by default, which does not include the “container” topic you get access to by installing `container.npk`.
Although Docker logging is tied into this same Linux terminal I/O design, we cannot assign the several differences in container logging under RouterOS to the same design differences as above.

The actual causes stem first from the fact that RouterOS boxes try to keep logging to a minimum by default, whereas Docker logs everything the container says, without restriction. RouterOS takes the surprising default of logging to volatile RAM in order to avoid burning out the flash. Additionally, it ignores all messages issued under “topics” other than the four preconfigured by default, which does not include the “container” topic you get access to by installing `container.npk`.

To prevent your containers’ log messages from being sent straight to the bit bucket, you must say:

    /container/{add,set} … logging=yes
    /system/logging add topics=container action=…

Having done so, we have a new limitation to contend with: RouterOS logging isn’t as powerful as the Docker “`logs`” command, which by default works as if you asked it, “Tell me what this particular container logged since the last time I asked.” RouterOS logging, on the other hand, mixes everything together in real time, requiring you to dig through the history manually.
Having done so, we have a new limitation to contend with: messages logged via this path get mixed together in real time, requiring you to dig through the history manually to tease them apart. Compare Docker and Podman logging, which let you get the logs for a single container, independent of the others.(^Podman does this in a particularly elegant way by implementing its `logs` command in terms of systemd’s unified “journal” subsystem.)

(The same is true of `podman logs`, except that it ties into systemd’s unified “journal” subsystem, a controversial design choice that ended up paying off handsomely when Podman came along and wanted to pull up per-container logs to match the way Docker behaved.)
RouterOS 7.20 solves this in part by adding the `/container/log` command, which stores up to 100 messages in-memory per container.


# <a id="cache"></a>There Is No Local Image Cache

I stated this [in the list above](#global), but what does that mean in practice? What do we lose as a result?

A surprising number of knock-on effects result from this lack: