如何将docker图像推送到注册表中,并仅通过docker-compose.yml文件拉取它们
我是docker的新手,在将图像推送到私人注册表并通过docker-compose.yml文件在办公室的另一台计算机中提取图像的过程中遇到了一些问题。如何将docker图像推送到注册表中,并仅通过docker-compose.yml文件拉取它们,docker,nginx,docker-compose,create-react-app,Docker,Nginx,Docker Compose,Create React App,我是docker的新手,在将图像推送到私人注册表并通过docker-compose.yml文件在办公室的另一台计算机中提取图像的过程中遇到了一些问题。 我的项目中有两个文件夹:nginx和client。 nginx是服务器,客户端是create-react-app。 nginx文件夹: default.conf: upstream client { server client:3000; } server { listen 80; location / { proxy_p
我的项目中有两个文件夹:nginx和client。
nginx是服务器,客户端是create-react-app。
nginx文件夹:
default.conf:
upstream client {
server client:3000;
}
server {
listen 80;
location / {
proxy_pass http://client;
}
location /sockjs-node {
proxy_pass http://client;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
}
}
Dockerfile:
FROM nginx
COPY ./default.conf /etc/nginx/conf.d/default.confd
客户端文件夹:
nginx/default.conf:
server {
listen 3000;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
Dockerfile:
FROM node:alpine as builder
ARG REACT_APP_NODE_ENV
ENV REACT_APP_NODE_ENV $REACT_APP_NODE_ENV
WORKDIR /app
COPY ./package.json ./
RUN npm i
COPY . .
RUN npm run build
FROM nginx
EXPOSE 3000
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/build /usr/share/nginx/html
version: '3'
services:
nginx:
restart: always
build:
dockerfile: Dockerfile
context: ./nginx
ports:
- '3050:80'
client:
build:
context: ./client
dockerfile: Dockerfile
args:
- REACT_APP_NODE_ENV=production
volumes:
- /app/node_modules
- ./client:/app
在这两个文件夹之外,我有docker-compose.yml文件:
FROM node:alpine as builder
ARG REACT_APP_NODE_ENV
ENV REACT_APP_NODE_ENV $REACT_APP_NODE_ENV
WORKDIR /app
COPY ./package.json ./
RUN npm i
COPY . .
RUN npm run build
FROM nginx
EXPOSE 3000
COPY ./nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=builder /app/build /usr/share/nginx/html
version: '3'
services:
nginx:
restart: always
build:
dockerfile: Dockerfile
context: ./nginx
ports:
- '3050:80'
client:
build:
context: ./client
dockerfile: Dockerfile
args:
- REACT_APP_NODE_ENV=production
volumes:
- /app/node_modules
- ./client:/app
当我在项目文件夹“docker compose up--build”中执行此操作时,一切都按我的预期进行。
现在,我想把图像推送到办公室的另一台电脑上。
我首先通过终端上的以下命令将两个映像(nginx和客户端)推送到注册表:
docker build -t orassayag/osr_streamer_nginx:v1.0 .
docker tag orassayag/osr_streamer_nginx:v1.0 <office_ip_address>:5000/orassayag/osr_streamer_nginx:v1.0
docker push <office_ip_address>:5000/orassayag/osr_streamer_nginx:v1.0
docker build -t orassayag/osr_streamer_client:v1.0 .
docker tag orassayag/osr_streamer_client:v1.0 <office_ip_address>:5000/orassayag/osr_streamer_client:v1.0
docker push <office_ip_address>:5000/orassayag/osr_streamer_client:v1.0
docker build-t orassayag/osr_streamer_nginx:v1.0。
docker标签Orassayg/osr_拖缆:v1.0:5000/Orassayg/osr_拖缆:v1.0
docker push:5000/Orassayg/osr_拖缆:v1.0
docker构建-t Orassayg/osr_拖缆客户端:v1.0。
docker标签Orassayg/osr_拖缆_客户端:v1.0:5000/Orassayg/osr_拖缆_客户端:v1.0
docker推送:5000/Orassayg/osr_拖缆_客户端:v1.0
然后,我更新了docker-compose.yml文件,如下所示:
version: '3'
services:
nginx:
image: <office_ip_address>:5000/orassayag/osr_streamer_nginx
restart: always
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- '3050:80'
client:
image: <office_ip_address>:5000/orassayag/osr_streamer_client
build:
context: ./client
dockerfile: Dockerfile
args:
- REACT_APP_NODE_ENV=production
volumes:
- /app/node_modules
- ./client:/app
版本:“3”
服务:
nginx:
图像::5000/Orassayg/osr_拖缆
重新启动:始终
建造:
上下文:./nginx
dockerfile:dockerfile
端口:
- '3050:80'
客户:
图像::5000/Orassayg/osr_拖缆_客户端
建造:
上下文:./client
dockerfile:dockerfile
args:
-反应\应用\节点\环境=生产
卷数:
-/app/node\u模块
-/客户端:/app
我转到另一台计算机,创建了一个文件夹名“TestDeploy”,并在终端上运行“docker compose build--pull”,我得到了以下错误:
错误:生成路径C:\Or\Web\StreamImages\TestDeploy\nginx不存在、不可访问或不是有效的URL。“
我做错了什么?
我需要帮助。您需要删除部署环境中的
构建:
块,否则Docker Compose将尝试构建映像,而不是拉取它们。您还需要删除卷:
,否则它将期望在本地而不是在映像中找到源代码
(我个人的建议是删除那些卷:
无处不在,在Docker之外进行开发,并让Docker设置准确反映您的部署环境,但我似乎对此持少数意见。)