Py学习  »  grapes  »  全部回复
回复总数  17
5 年前
回复了 grapes 创建的主题 » 在不使用IP的情况下从主机与docker内的服务通信

欢迎您选择更适合您需要的方式。

选择1。使用主机的网络。在这种情况下,Docker不会为container创建单独的网络,而您可以连接到container的服务,就像它们将在您的主机上运行一样:

docker run --network=host <image_name>

这种方法的缺点是隔离度低,因而安全。您不需要在这里公开任何端口-如果服务监听 8080 ,打开 localhost:8080 好好享受吧。

第二种方法更为正确——在容器中公开(以某种方式转发)内部端口,并将它们映射到主机中的端口。

docker run -p 8080:80 <image_name>

这将映射端口 80 从集装箱到港口 8080个 在主机上。与前面的示例一样,仍然使用 localhost ,例如。 本地主机:8080 .

5 年前
回复了 grapes 创建的主题 » 基于python中两个短序列的过滤行

我不确定你对 this distance can be 2 letters or more ,是否必须进行检查,但以下代码将为您提供所需的输出:

mot1 = 'AATAAA'
mot2 = 'GGAC'

with open('infile.txt', 'r') as inp:
    last_id = None
    for line in inp:
        if line.startswith('>'):
            last_id = line
        else:
            if mot1 in line and mot2 in line:
                print(last_id)
                print(line)

如果需要,可以将输出重定向到文件

5 年前
回复了 grapes 创建的主题 » Dockers-Flask Python错误

我认为错误信息看起来是不言而喻的。升级一下 pip 在你的内心 Dockerfile :

RUN pip install --upgrade pip

RUN python -m pip install --upgrade pip

在大多数Python发行版中,pip不是最新的,需要手动升级,而我看不到 皮普 在您的 停靠文件

同时尝试安装 gcc -有些python包需要编译,而alpine python没有 海合会 默认情况下。

RUN apk add -y gcc

因为Docker在默认情况下是无状态的。每次你打电话 docker run 它重建了容器。如果要保留某些数据,有两种常规方法:

  1. 容器离开后不能取出。刚开始的时候给你的容器起个可爱的名字,比如 docker run --name jessica mongo 然后,在随后的通话中,使用 docker start jessica

  2. 使用卷存储数据并在容器之间共享。在本例中,您将使用卷参数启动容器,如 docker run -v /home/data:/data mongo .另外,您还必须重新配置 mongodb 在路径中保存数据 /data 在集装箱里。这种方法更简单,可用于在不同容器之间共享数据,以及为第一次运行提供默认数据

升级版

使用时 docker-compose 要启动容器,如果需要在会话之间持久化数据,只需使用 外部的 卷,这是您预先创建的。

首先创建卷,比方说 lovely 以下内容:

docker volume create lovely

然后把它用在 docker-compose.yml 以下内容:

version: '3'
services:
  db1:
    image: whatever
    volumes:
      - lovely:/data
  db2:
    image: whatever
    volumes:
      - lovely:/data
volumes:
  lovely:
    external: true
5 年前
回复了 grapes 创建的主题 » Docker容器中的python,优雅地停止

抓住 KeyboardInterrupt 就这样。

if __name__ == '__main__':
  logging.basicConfig(stream=sys.stdout, level=logging.DEBUG)
  try:
    while True:
      time.sleep(1)
      logging.info("doing something in a loop ...")
  except KeyboardInterrupt as ex:
    print('goodbye!')
5 年前
回复了 grapes 创建的主题 » 在docker compose中的nsqd

Docker方法是一个服务/一个容器。

docker-compose 使服务的编排很容易,就像它们在一个容器中(或者更容易),因为您可以使用服务提供者的规范图像而不是构建自己的服务。

同时,整个Docker基础设施在维护单进程容器方面也进行了很好的调整。

5 年前
回复了 grapes 创建的主题 » Docker for Windows-装载目录为空

如果你需要文件 容器放入主机,更好地使用 docker cp 命令: https://docs.docker.com/engine/reference/commandline/cp/

它看起来像: docker cp my_db_dev1:/var/lib/mysql d:\docker\data

小精灵

实际上,我想在其他容器中持久化数据库文件, 所以我想要使用量

在这种情况下,您必须:

  1. 开始使用 docker-compose 编排容器。

  2. docker-compose.yml 创建卷,卷在所有容器之间共享。类似于:

docker-compose.yml文件

version: '3'
services:
  db1:
    image: whatever
  volumes:
    - myvol:/data

  db2:
    image: whatever2
  volumes:
    - myvol:/data

volumes:
  myvol:  

描述: https://docs.docker.com/compose/compose-file/#volume-configuration-reference

5 年前
回复了 grapes 创建的主题 » 如何将run<image>参数传递给dockerfile使用?

当然,因为你很困惑 Docker's build run 阶段。事实上,环境变量工作得很好。

你打电话 docker run -e VAR2=betterValue test 事实上,您可以使用这个值运行容器,但是目录 goodValue 创建于 建造 阶段。

你必须:

呼叫 VAR2=/foo docker build -t test . 你要得到你的 /foo 在生成阶段创建的文件夹。

5 年前
回复了 grapes 创建的主题 » 让班上的人知道Pycharm

将文件夹标记为 Sources Root 在井手。 Right Click -> Mark Directory As -> Sources Root

5 年前
回复了 grapes 创建的主题 » 对有效函数名python的未解析引用

在使用函数之前应该声明它。在全球范围内使用 for -在全局范围内执行的循环,这意味着立即执行。

5 年前
回复了 grapes 创建的主题 » 用python从文本文件中提取数据

请尝试以下代码:

with open('mydata.txt') as f:
  for line in f:
    line = line.strip(' \t\r\n')  # remove spaces and line endings
    if line.ednswith(';'):
      pass # this is category definition
    else:
      pass # this is data line
5 年前
回复了 grapes 创建的主题 » 卷容器附件的Docker合成问题

添加 external 属性到卷部分:

version '3'
services:
   my_service:
      image: doc_image
      volumes:
         - doc_volume:/directory
volumes:
   doc_volume:
       external: true   # << here we go

你的问题是 docker-compose 创建另一个卷,除非明确告诉他使用外部卷。外部手段创造不是靠码头工人组成的。

5 年前
回复了 grapes 创建的主题 » docker compose中的环境变量

这是可行的。你必须申报 FOO 去某个地方得到结果。以下代码将起作用:

来电显示

#!/bin/sh
export FOO=/home
docker-compose up
5 年前
回复了 grapes 创建的主题 » 为api请求在python中jsonify制表符

它将如下所示:

d = {'jean': 22, 'pierre': 26, 'john': 21, 'charles': 23, 'test': 25, 'test2': 45}
res = []
for k, v in d.items():
  res.append({"name": k, "age": v})

print(res)
5 年前
回复了 grapes 创建的主题 » 获取python docker容器以与redis docker容器交互

这就是Docker网络。快速解决方案-使用 host 两个容器的网络模式。缺点是隔离度低,但您可以使其快速工作:

docker run -d --network=host redis ...
docker run --network=host python-redis-py ...

然后从连接 python redis 只使用 localhost 作为主机名。

更好的解决方案是使用Docker用户定义的桥接网络

# create network
docker network create foo
docker run -d --network=foo --name my-db redis ...
docker run    --network=foo python-redis-py ...

注意在这种情况下你 不能 使用 本地服务器 而是使用 my-db 作为主机名。所以我才用 --name my-db 启动第一个容器时的参数。在用户定义的桥接网络中,容器通过它们的名称相互连接。

Docker加盟 ENTRYPOINT CMD 如果两个命令行都使用 杰森 符号,如您的示例中所示。

这是JSON符号: CMD [ "dotnet", "/app/netcore/Somename.dll"]

这是外壳符号: CMD dotnet /app/netcore/Somename.dll

另一件你需要知道的事-写的是什么 docker run ... <image_name> ... 之后 被认为是 CMD .

所以,总结一下。

  1. 命令行的常量(不可变)部分,如 dotnet foo.dll 你可以放进去 入口点 .

  2. 变量部分,与其他参数一样,您提供 docker run 并且可以选择将默认值设置为 CMD 在里面 Dockerfile

例子:

文档文件

...
ENTRYPOINT ["dotnet", "/app/netcore/Somename.dll"]
CMD ["--help"]

命令行1:

docker run ... <your image name> --environment=Staging --port=8080 

将导致 dotnet /app/netcore/Somename.dll --environment=Staging --port=8080

命令行2:

docker run ... <your image name>

将导致 dotnet /app/netcore/Somename.dll --help . --help 来自默认值,在DockerFile中定义。

5 年前
回复了 grapes 创建的主题 » 如何在Raspberry PI等硬件平台中嵌入机器学习python代码?

python支持各种平台,包括 arm-based .

您的Raspberry PI支持Linux发行版,只需安装python并继续。