Node-red连接PLCSIM Advanced(一)----- Node-red的Docker安装及换国内镜像

知道Node-red很久了,一直想玩一下。在树莓派上装过,在阿里云上装过,但装完之后也就跑个example。想着连下PLC,但一直没逮到机会。毕竟,PLC要联网这条还是有点......
最近在新电脑上折腾,装虚拟机,突然想到,是不是可以同时开两台虚拟机,一台跑PLCSIM,一台跑node-red。为防止时间久了忘记,就记个笔记。
linux系统使用的是armbian。之前在ubuntu上和raspiOS上安装时候,都是通过npm安装的,这次准备尝试下docker。
于是,按照官网输入

docker run -it -p 1880:1880 --name mynodered nodered/node-red

被告知

docker: error pulling image configuration: download failed after attempts=6: dial tcp 128.242.240.180:443: connect: connection refused.

问AI后,被告知是无法连接到远程仓库。
于是就问了下是否有国内镜像,AI就给了我一溜镜像服务供应商。

还告诉我可以通过修改Docker的配置文件来使用国内镜像服务。
有两个配置文件,一个是系统级的 daemon.json 在/etc/docker/路径下,还有个是用户级的config.json在~/.docker/路径下。
在这两个路径下一通找,没找着,于是就find了以下。
全局搜索 config.json 文件

find / -name config.json 2>/dev/null

这个命令会在整个系统中搜索 config.json 文件,并忽略任何错误输出。
详细解释:

`find / -name config.json 2>/dev/null` 是一个用于在系统中查找名为 `config.json` 的文件的命令。这条命令的作用是从根目录 `/` 开始递归地搜索所有子目录,并找出所有名为 `config.json` 的文件。同时,它会忽略任何错误信息。

### 命令分解

1. **`find /`**   - `find` 是一个用于在文件系统中查找文件的命令。
   - `/` 指定从根目录开始搜索。

2. **`-name config.json`**   - `-name` 选项用于指定要查找的文件名。
   - `config.json` 是要查找的文件名。

3. **`2>/dev/null`**   - `2>` 用于重定向标准错误输出(stderr)。
   - `/dev/null` 是一个特殊文件,任何写入它的内容都会被丢弃。
   - `2>/dev/null` 的作用是忽略 `find` 命令执行过程中产生的任何错误信息,使得命令输出更加干净。

### 命令解释

- **查找所有 `config.json` 文件**  - `find / -name config.json` 会从根目录 `/` 开始递归地搜索所有子目录,并找出所有名为 `config.json` 的文件。
li
- **忽略错误信息**  - `2>/dev/null` 会忽略 `find` 命令需要通过“随笔”。在执行过程中可能产生的任何错误信息,例如权限不足或文件系统不可读的错误。

发现两个json文件都不存在,所以准备手动建一个。

$ sudo tee /etc/docker/daemon.json > /dev/null <<EOF
{
  "registry-mirrors": ["https://mirror.daocloud.io"]
}
EOF

查看下文件内容

$ cat /etc/docker/daemon.json 
{
  "registry-mirrors": ["https://mirror.daocloud.io"]
}

重启服务

 $ sudo systemctl daemon-reload 
 $ sudo systemctl restart docker

验证配置

docker info | grep -A 1 'Registry Mirrors'

反馈

 Registry Mirrors:
  https://mirror.daocloud.io/

配置完成之后,发现仍旧无法使用,应该是mirror.daocloud.io暂时不可用。于是继续寻找。终于在Docker Hub 国内镜像源配置 这篇文章,找到可用的腾讯云镜像。
按照文章所说,进行镜像是否有效的测试。

docker pull hub-mirror.c.163.com/library/nginx:latest
docker pull mirror.baidubce.com/library/nginx:latest
docker pull ccr.ccs.tencentyun.com/library/nginx:latest
docker pull dockerproxy.com/library/nginx:latest

莫名其妙的乌龙


尝试发现发现腾讯云可用(后发现配置在daemon,json后又无法连接了,不知道什么情况)。
如果出现permission denied,在指令前加sudo.
docker pull ccr.ccs.tencentyun.com/library/nginx:latest指令实质是通过Docker pull从指定仓库ccr.ccs.tencentyun.com镜像服务中拉取nginx镜像的latest最新版本。
所以,我暂时不需要nginx,所以需要在拉取后再删去。


AI的详细说明如下:

详细说明

  1. 命令解析

    • docker pull:这是一个 Docker 命令,用于从远程仓库拉取一个镜像到本地。
    • ccr.ccs.tencentyun.com:这是腾讯云的容器镜像服务(Container Registry)的域名。
    • library/nginx:这是镜像的名称。library/nginx 表示官方的 nginx 镜像。
    • :latest:这是标签,表示镜像的版本。latest 标签通常表示最新的版本。
  2. 执行过程

    • 当你运行 docker pull ccr.ccs.tencentyun.com/library/nginx:latest 时,Docker 客户端会连接到腾讯云的容器镜像服务,并请求下载 nginx 的最新版本镜像。
    • 如果你之前没有从腾讯云的容器镜像服务拉取过镜像,可能会需要进行身份验证。如果你之前已经设置了认证信息,Docker 会自动使用这些信息进行认证。
    • Docker 会逐层下载镜像数据,并在本地缓存这些层。如果某些层已经存在于本地,Docker 会跳过这些层的下载。
  3. 镜像结构

    • Docker 镜像是由多个层组成的。每个层代表镜像构建过程中的一个步骤。
    • 下载完成后,Docker 会将这些层组合成一个完整的镜像。
  4. 结果验证

    • 你可以使用 docker images 命令来查看本地的镜像列表,确认 nginx 镜像是否已经被成功拉取。

示例输出

假设你运行 docker pull ccr.ccs.tencentyun.com/library/nginx:latest,输出可能如下:

Using default tag: latest
latest: Pulling from library/nginx
Digest: sha256:abcdef1234567890...
Status: Downloaded newer image for ccr.ccs.tencentyun.com/library/nginx:latest

这表示 Docker 成功从腾讯云的容器镜像服务中拉取了 nginx 的最新版本。

验证镜像

  1. 查看镜像列表

    docker images
    

    输出示例:

    REPOSITORY                              TAG                 IMAGE ID            CREATED             SIZE
    ccr.ccs.tencentyun.com/library/nginx    latest              1234567890          2 weeks ago         133MB
    

    这表示 nginx 镜像已经被成功拉取到本地。

其他命令

  1. 查看镜像的详细信息

    docker inspect ccr.ccs.tencentyun.com/library/nginx:latest
    

    这将显示镜像的详细信息,包括标签、创建时间、大小等。

  2. 启动一个容器

    docker run -d --name my-nginx -p 8080:80 ccr.ccs.tencentyun.com/library/nginx:latest
    

    这将启动一个名为 my-nginx 的容器,并将容器的 80 端口映射到主机的 8080 端口。

总结

  • docker pull 命令:从远程仓库拉取镜像。
  • 腾讯云容器镜像服务ccr.ccs.tencentyun.com 是腾讯云提供的容器镜像服务。
  • library/nginx:官方的 nginx 镜像。
  • :latest:表示镜像的最新版本。

但最后尝试下来ccr.ccs.tencentyun.com 也不好用......

实操过程

$ sudo docker pull ccr.ccs.tencentyun.com/library/nginx:latest

反馈

latest: Pulling from library/nginx
c353fd29d8c5: Pull complete 
98b095d7d2b4: Pull complete 
af5f0e3644c1: Pull complete 
Digest: sha256:fad8e1cd52e24bce7b72cd7cb674a2efad671647b917055f5bd8a1f7ac9b1af8
Status: Downloaded newer image for ccr.ccs.tencentyun.com/library/nginx:latest
ccr.ccs.tencentyun.com/library/nginx:latest

发现下载了nginx的image镜像。
如果在进行pull操作时,遇到Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?,则说明Docker守护进程(Docker daemon)没有运行。
此时,需要启动docker。

sudo systemctl start docker

通过

sudo systemctl status docker

可以查看docker的运行状态。

$ sudo docker images

反馈

REPOSITORY                             TAG       IMAGE ID       CREATED       SIZE
ccr.ccs.tencentyun.com/library/nginx   latest    3f8a4339aadd   6 years ago   108MB

然后我们可以根据IMAGE ID删除不需要的镜像。

$ sudo docker rmi 3f8a4339aadd 
Untagged: ccr.ccs.tencentyun.com/library/nginx:latest
Untagged: ccr.ccs.tencentyun.com/library/nginx@sha256:fad8e1cd52e24bce7b72cd7cb674a2efad671647b917055f5bd8a1f7ac9b1af8
Deleted: sha256:3f8a4339aadda5897b744682f5f774dc69991a81af8d715d37a616bb4c99edf5
Deleted: sha256:bb528503f6f01b70cd8de94372e1e3196fad3b28da2f69b105e95934263b0487
Deleted: sha256:410204d28a96d436e31842a740ad0c827f845d22e06f3b1ff19c3b22706c3ed4
Deleted: sha256:2ec5c0a4cb57c0af7c16ceda0b0a87a54f01f027ed33836a5669ca266cafe97a

然后,我们再执行`docker images'查看,就可以发现之前安装的nginx被删掉了。

$ sudo docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE

配置docker

修改配置文件,/ect/docker/daemon.json

{
  "registry-mirrors": ["ccr.ccs.tencentyun.com/"]
}

但最后发现,上面那个ccr.ccs.tencentyun.com/的网址也不好用。


好用的在这里!!!

根据docker凉了,国内镜像站全军覆没!这篇文章提供的Docker镜像加速站,重新配置daemon.json文件,再尝试安装node-red,依旧报错超时。
问了下AI,说直接执行docker run -it -p 1880:1880 --name mynodered nodered/node-red指令不会遍历每个镜像加速站,提示我写脚本。于是乎:
创建个目录:

sudo mkdir ~/scripts

新建一个.sh文件

sudo nano ~/scripts/pull_and_run_node_red.sh

复制以下内容,并保存

#!/bin/bash

# 定义镜像名
IMAGE="nodered/node-red"

# 定义镜像加速器列表
MIRRORS=("https://docker.m.daocloud.io" "https://noohub.ru" "https://huecker.io" "https://dockerhub.timeweb.cloud")

# 尝试拉取镜像
for mirror in "${MIRRORS[@]}"; do
    echo "Trying mirror: $mirror"
    # 使用 sudo 运行 docker 命令
    if sudo docker pull "$IMAGE"; then
        break
    fi
done

# 如果所有镜像加速器都失败,则报错
if [ $? -ne 0 ]; then
    echo "Failed to pull image from

设置权限

sudo chmod +x ~/scripts/pull_and_run_node_red.sh

运行

~/scripts/pull_and_run_node_red.sh

然后,等待安装。
完成后

$ sudo docker images
REPOSITORY         TAG       IMAGE ID       CREATED        SIZE
nodered/node-red   latest    641972c48d83   31 hours ago   571MB

$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a7772b55fa0 nodered/node-red "./entrypoint.sh" 6 days ago Exited (143) 12 seconds ago mynodered
可以看到容器镜像已经拉取并创建完成,同时,我们可以看到这个容器名字是mynodered,
再启动容器

sudo docker start mynodered

查看下容器状况

$ sudo docker ps
CONTAINER ID   IMAGE              COMMAND             CREATED      STATUS                    PORTS                                       NAMES
5a7772b55fa0   nodered/node-red   "./entrypoint.sh"   6 days ago   Up 10 minutes (healthy)   0.0.0.0:1880->1880/tcp, :::1880->1880/tcp   mynodered

可以看到已经启动了,且1880端口已映射到素主机。

再通过宿主机上的浏览器访问
![](https://img2024.cnblogs.com/blog/2657087/202408/2657087-20240830113712844-1824113338.png)
成功!!!
没想到成功来得如此突然,哈哈!!!

--------------------------------------------------------------------------
docker启动停止和设置自启动
posted @   科里布  阅读(275)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
点击右上角即可分享
微信分享提示