GVKun编程网logo

在 Windows Server 上构建 Docker 映像时 Python PIP 失败(docker搭建python环境)

4

在这里,我们将给大家分享关于在WindowsServer上构建Docker映像时PythonPIP失败的知识,让您更了解docker搭建python环境的本质,同时也会涉及到如何更有效地4行指令解决p

在这里,我们将给大家分享关于在 Windows Server 上构建 Docker 映像时 Python PIP 失败的知识,让您更了解docker搭建python环境的本质,同时也会涉及到如何更有效地4 行指令解决 pip 下载 Python 第三方库太慢问题(pip 更换国内下载源)、Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock、Docker 在创建 .net core 3.1 Linux 映像时,获取 SSL 证书错误,根据验证程序,远程证书无效、Docker 映像无法在 AWS EC2 linux 上构建,但在 Windows 和 Mac 上构建时有效 package.jsonDockerfiledocker-compose.yml错误的内容。

本文目录一览:

在 Windows Server 上构建 Docker 映像时 Python PIP 失败(docker搭建python环境)

在 Windows Server 上构建 Docker 映像时 Python PIP 失败(docker搭建python环境)

如何解决在 Windows Server 上构建 Docker 映像时 Python PIP 失败

我有一个 Windows Server 2016 Box,我想用它来构建部署 Python Flask 应用程序的 Docker EE Windows 容器。

我尝试在没有代理环境变量的情况下进行构建。我试过设置代理环境变量(我可能做错了,我使用了带有 Flask 分配端口的服务器 IP 地址。)

我也试过只在 dockerfile 中安装一个包而不是 require.txt 文件,但没有成功。

我不相信 Windows Box 有代理设置,因为我运行:netsh winhttp show proxy 并且它说 Direct access (no proxy server).

我尝试重新启动 docker 服务并尝试使用 --network=host 进行构建。我读过尝试将 DNS 服务器设置为 8.8.8.8 可能值得,但我不确定在哪里设置它。任何人都可以提供您的经验吗?

请记住,我可以成功运行此程序:docker run hello-world:nanoserver-sac2016

这里是 docker 文件:

FROM python:3.8

workdir /app

copY . .
RUN pip install -r requirements.txt
copY . .

ENTRYPOINT ["python"]
CMD ["wsgi.py"]

EXPOSE 8000

这里是错误:

PS C:\\Users\\administrator.user1\\Desktop\\FlaskReportAppDev> docker build -t myflaskapp .
Sending build context to Docker daemon  252.7MB
Step 1/8 : FROM python:3.8
 ---> d070676dfed8
Step 2/8 : workdir /app
 ---> Using cache
 ---> f02733df8e5f
Step 3/8 : copY . .
 ---> ef40674fc745
Step 4/8 : RUN pip install -r requirements.txt
 ---> Running in 6c984bec9495
WARNING: retrying (Retry(total=4,connect=None,read=None,redirect=None,status=None)) after connection broken by ''NewConnectionError(''<pip._vendor.urllib3.connection.HTTPSConnection object at 0x0000021B39F42F
D0>: Failed to establish a new connection: [Errno 11001] getaddrinfo Failed'')'': /simple/click/
WARNING: retrying (Retry(total=3,status=None)) after connection broken by ''NewConnectionError(''<pip._vendor.urllib3.connection.HTTPSConnection object at 0x0000021B39ED33
70>: Failed to establish a new connection: [Errno 11001] getaddrinfo Failed'')'': /simple/click/
WARNING: retrying (Retry(total=2,status=None)) after connection broken by ''NewConnectionError(''<pip._vendor.urllib3.connection.HTTPSConnection object at 0x0000021B3831A2
20>: Failed to establish a new connection: [Errno 11001] getaddrinfo Failed'')'': /simple/click/
WARNING: retrying (Retry(total=1,status=None)) after connection broken by ''NewConnectionError(''<pip._vendor.urllib3.connection.HTTPSConnection object at 0x0000021B39EECA
90>: Failed to establish a new connection: [Errno 11001] getaddrinfo Failed'')'': /simple/click/
WARNING: retrying (Retry(total=0,status=None)) after connection broken by ''NewConnectionError(''<pip._vendor.urllib3.connection.HTTPSConnection object at 0x0000021B39F4D4
F0>: Failed to establish a new connection: [Errno 11001] getaddrinfo Failed'')'': /simple/click/
ERROR: Could not find a version that satisfies the requirement click==7.1.1 (from versions: none)
ERROR: No matching distribution found for click==7.1.1
The command ''powershell -Command $ErrorActionPreference = ''Stop''; $Progresspreference = ''SilentlyContinue''; pip install -r requirements.txt'' returned a non-zero code: 1

4 行指令解决 pip 下载 Python 第三方库太慢问题(pip 更换国内下载源)

4 行指令解决 pip 下载 Python 第三方库太慢问题(pip 更换国内下载源)

 问题由来:

之前在写一篇项目博客时,pip 下载 Python 第三方库:graphic-verification-code实在太慢了,于是使用 Python 库官网下载,还是很慢,而且不断失败,下载慢且不断失败的根本原因是:该库文件是国外的下载源。

经过评论区的小伙伴们推荐,遂得一解决方法,分享给各位。


解决方法:

pip 下载更换国内源(Windows 系统),共 3 步,如下所示:

第 1 步:打开目录输入:% appdata%,打开 % appdata% 文件,如下图所示:

本文分享 CSDN - 不脱发的程序猿。
如有侵权,请联系 support@oschina.cn 删除。
本文参与 “OSC 源创计划”,欢迎正在阅读的你也加入,一起分享。

Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock

Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock

在 Docker 容器里面使用 docker run/docker build

Docker 容器技术目前是微服务/持续集成/持续交付领域的第一选择。而在 DevOps 中,我们需要将各种后端/前端的测试/构建环境打包成 Docker 镜像,然后在需要的时候,Jenkins 会使用这些镜像启动容器以执行 Jenkins 任务。

为了方便维护,我们的 CI 系统如 Jenkins,也会使用 Docker 方式部署。 Jenkins 任务中有些任务需要将微服务构建成 Docker 镜像,然后推送到 Harbor 私有仓库中。 或者我们所有的 Jenkins Master 镜像和 Jenkins Slave 镜像本身都不包含任何额外的构建环境,执行任务时都需要启动包含对应环境的镜像来执行任务。

我们的 Jenkins Master、Jenkins Slaves 都是跑在容器里面的,该如何在这些容器里面调用 docker run 命令启动包含 CI 环境的镜像呢? 在这些 CI 镜像里面,我们从源码编译完成后,又如何通过 docker build 将编译结果打包成 Docker 镜像,然后推送到内网仓库呢?

答案下面揭晓。

一、原理说明:/var/run/docker.sock

Docker 采取的是 Client/Server 架构,我们常用的 docker xxx 命令工具,只是 docker 的 client,我们通过该命令行执行命令时,实际上是在通过 client 与 docker engine 通信。

我们通过 apt/yum 安装 docker-ce 时,会自动生成一个 systemd 的 service,所以安装完成后,需要通过 sudo systemctl enable docker.service 来启用该服务。 这个 Docker 服务启动的,就是 docker engine,查看 /usr/lib/systemd/system/docker.service,能看到有这样一条语句:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

默认情况下,Docker守护进程会生成一个 socket(/var/run/docker.sock)文件来进行本地进程通信,因此只能在本地使用 docker 客户端或者使用 Docker API 进行操作。 sock 文件是 UNIX 域套接字,它可以通过文件系统(而非网络地址)进行寻址和访问。

因此只要以数据卷的形式将 docker 客户端和上述 socket 套接字挂载到容器内部,就能实现 "Docker in Docker",在容器内使用 docker 命令了。具体的命令见后面的「示例」部分。

要记住的是,真正执行我们的 docker 命令的是 docker engine,而这个 engine 跑在宿主机上。所以这并不是真正的 "Docker in Docker".

二、示例

在容器内部使用宿主机的 docker,方法有二:

  1. 命令行方式:将 /usr/bin/docker 映射进容器内部,然后直接在容器内部使用这个命令行工具 docker
    • 需要的时候,也可以将 /etc/docker 文件夹映射到容器内,这样容器内的 docker 命令行工具也会使用与宿主机同样的配置。
  2. 编程方式:在容器内部以编程的方式使用 docker
    • 通过 python 使用 docker: 在 Dockerfile 中通过 pip install docker 将 docker client 安装到镜像中来使用

容器的启动方式也有两种,如下:

1. 直接通过 docker 命令启动

示例命令如下:

docker run --name <name> \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /usr/bin/docker:/usr/bin/docker \
    --user root \
    <image-name>:<tag>

**必须以 root 用户启动!(或者其他有权限读写 /var/run/docker.sock 的用户)**然后,在容器内就能正常使用 docker 命令,或者访问宿主机的 docker api 了。

2. 使用 docker-compose 启动

docker-compose.yml 文件内容如下:

version: ''3.3''
services:
  jenkins-master:
    image: jenkinsci/blueocean:latest
    container_name: jenkins-master
    environment:
      - TZ=Asia/Shanghai  # 时区
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - ./jenkins_home:/var/jenkins_home  # 将容器中的数据映射到宿主机
      - /usr/bin/docker:/usr/bin/docker  # 为容器内部提供 docker 命令行工具(这个随意)
      - /var/run/docker.sock:/var/run/docker.sock  # 容器内部通过 unix socket 使用宿主机 docker engine
    user: root  # 必须确保容器以 root 用户启动!(这样它才有权限读写 docker.socket)
    restart: always

然后通过 docker-compose up -d 即可后台启动容器。

Docker 中的 uid 与 gid

通过上面的操作,我们在容器内执行 docker ps 时,还是很可能会遇到一个问题:权限问题

如果你容器的默认用户是 root,那么你不会遇到这个问题,因为 /var/run/docker.sock 的 onwer 就是 root.

但是一般来说,为了限制用户的权限,容器的默认用户一般都是 uid 和 gid 都是 1000 的普通用户。这样我们就没有权限访问 /var/run/docker.sock 了。

解决办法:

方法一(不一定有效):在构建镜像时,最后一层添加如下内容:

# docker 用户组的 id,通常都是 999
RUN groupadd -g 999 docker \
    && usermod -aG docker <your_user_name>

这样我们的默认用户,就能使用 docker 命令了。

P.S. 999 不一定是 docker 用户组,所以上述方法某些情况下可能失效。这时还是老老实实通过 docker run -u root 启动容器吧。(或者在 docker-compose.yml 中添加 user: root 属性)

参考

  • Docker in Docker - 王柏元

Docker 在创建 .net core 3.1 Linux 映像时,获取 SSL 证书错误,根据验证程序,远程证书无效

Docker 在创建 .net core 3.1 Linux 映像时,获取 SSL 证书错误,根据验证程序,远程证书无效

如何解决Docker 在创建 .net core 3.1 Linux 映像时,获取 SSL 证书错误,根据验证程序,远程证书无效

我已经创建了一个 ASP.Net Core 3.1 Web API 项目,其中引用了 .net 标准库 2.0

我的开发机器是窗口,当我尝试为 Linux 环境 (docker build -t aspdotnetdemo) 创建 docker 映像时,我收到以下错误:

无法加载源的服务索引 https://api.nuget.org/v3/index.json。 /usr/share/dotnet/sdk/3.1.405/NuGet.targets(128,5): 错误:SSL 无法建立连接,请参阅内部异常。 /usr/share/dotnet/sdk/3.1.405/NuGet.targets(128,5): 错误: 根据验证程序,远程证书无效。

Docker 映像无法在 AWS EC2 linux 上构建,但在 Windows 和 Mac 上构建时有效 package.jsonDockerfiledocker-compose.yml错误

Docker 映像无法在 AWS EC2 linux 上构建,但在 Windows 和 Mac 上构建时有效 package.jsonDockerfiledocker-compose.yml错误

如何解决Docker 映像无法在 AWS EC2 linux 上构建,但在 Windows 和 Mac 上构建时有效 package.jsonDockerfiledocker-compose.yml错误

当我在 Mac 或 Windows 上使用以下 3 个文件运行 docker-compose build minexample 时,映像构建成功。但是当我尝试在 AWS Linux 2 EC2 实例上做同样的事情时,它在运行 node-sass 的安装脚本时失败(见下文)。

经过 2 天多次反复试验后,我意识到如果我将 react-scripts 版本降低到“3.0.0”,问题就会消失。这也意味着我需要将开发依赖项中的 eslint(我不包括在最小示例中)从 7.12.0 降低到 5.16.0。

我有几个问题:

  1. docker 构建如何在 Mac/Windows 上成功,而在 Linux 上却失败?我认为容器应该是一个孤立的环境,但主机操作系统以某种方式影响了这里的结果。
  2. 如何确定哪些节点包版本存在冲突?通过反复试验,我们花了很多时间才发现降低 react-script 的版本可以解决(或隐藏)问题。

package.json

  1. {
  2. "name": "minexample","version": "1.0.0","dependencies": {
  3. "node-sass": "4.12.0","react": "16.14.0","react-dom": "16.14.0","react-router": "5.0.0","react-router-dom": "5.0.0","react-scripts": "4.0.2"
  4. },"devDependencies": {
  5. },"scripts": {
  6. "start": "react-scripts start"
  7. }
  8. }

Dockerfile

  1. FROM node:10.16.0-alpine AS build
  2. RUN mkdir -p /usr/src/app
  3. workdir /usr/src/app
  4. ENV PATH /usr/src/app/node_modules/.bin:$PATH
  5. # cache dependencies
  6. copY ./package.json /usr/src/app/package.json
  7. RUN npm install

docker-compose.yml

  1. version: ''3.7''
  2. services:
  3. minexample:
  4. build:
  5. context: ./
  6. dockerfile: Dockerfile
  7. container_name: minexample

错误

  1. > node-sass@4.12.0 install /usr/src/app/node_modules/node-sass
  2. > node scripts/install.js
  3. The command ''/bin/sh -c npm install'' returned a non-zero code: 1
  4. ERROR: Service ''minexample'' Failed to build

解决方法

基于评论。

我试图重现该问题,但在我的测试中,docker 映像成功构建

已使用实例,t2.small(尚未使用 t2.micro 进行测试)。

亚马逊 Linux 2:

  1. NAME="Amazon Linux"
  2. VERSION="2"
  3. ID="amzn"
  4. ID_LIKE="centos rhel fedora"
  5. VERSION_ID="2"
  6. PRETTY_NAME="Amazon Linux 2"
  7. ANSI_COLOR="0;33"
  8. CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
  9. HOME_URL="https://amazonlinux.com/"

Docker

  1. docker --version
  2. Docker version 19.03.13-ce,build 4484c46

docker-compose

  1. docker-compose --version
  2. docker-compose version 1.28.4,build cabd5cfb

构建映像

  1. docker image ls
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. a_minexample latest 82968af21096 24 minutes ago 426MB
  4. node 10.16.0-alpine 9dfa73010b19 20 months ago 75.3MB

关于在 Windows Server 上构建 Docker 映像时 Python PIP 失败docker搭建python环境的介绍已经告一段落,感谢您的耐心阅读,如果想了解更多关于4 行指令解决 pip 下载 Python 第三方库太慢问题(pip 更换国内下载源)、Docker in Docker(实际上是 Docker outside Docker): /var/run/docker.sock、Docker 在创建 .net core 3.1 Linux 映像时,获取 SSL 证书错误,根据验证程序,远程证书无效、Docker 映像无法在 AWS EC2 linux 上构建,但在 Windows 和 Mac 上构建时有效 package.jsonDockerfiledocker-compose.yml错误的相关信息,请在本站寻找。

本文标签: