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的详细说明如下:
详细说明
-
命令解析:
docker pull
:这是一个 Docker 命令,用于从远程仓库拉取一个镜像到本地。ccr.ccs.tencentyun.com
:这是腾讯云的容器镜像服务(Container Registry)的域名。library/nginx
:这是镜像的名称。library/nginx
表示官方的nginx
镜像。:latest
:这是标签,表示镜像的版本。latest
标签通常表示最新的版本。
-
执行过程:
- 当你运行
docker pull ccr.ccs.tencentyun.com/library/nginx:latest
时,Docker 客户端会连接到腾讯云的容器镜像服务,并请求下载nginx
的最新版本镜像。 - 如果你之前没有从腾讯云的容器镜像服务拉取过镜像,可能会需要进行身份验证。如果你之前已经设置了认证信息,Docker 会自动使用这些信息进行认证。
- Docker 会逐层下载镜像数据,并在本地缓存这些层。如果某些层已经存在于本地,Docker 会跳过这些层的下载。
- 当你运行
-
镜像结构:
- Docker 镜像是由多个层组成的。每个层代表镜像构建过程中的一个步骤。
- 下载完成后,Docker 会将这些层组合成一个完整的镜像。
-
结果验证:
- 你可以使用
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
的最新版本。
验证镜像
-
查看镜像列表:
docker images
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE ccr.ccs.tencentyun.com/library/nginx latest 1234567890 2 weeks ago 133MB
这表示
nginx
镜像已经被成功拉取到本地。
其他命令
-
查看镜像的详细信息:
docker inspect ccr.ccs.tencentyun.com/library/nginx:latest
这将显示镜像的详细信息,包括标签、创建时间、大小等。
-
启动一个容器:
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端口已映射到素主机。
再通过宿主机上的浏览器访问

成功!!!
没想到成功来得如此突然,哈哈!!!
--------------------------------------------------------------------------
docker启动停止和设置自启动
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY