Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅在docker环境中出现Python错误(名称或服务未知)_Python_Docker - Fatal编程技术网

仅在docker环境中出现Python错误(名称或服务未知)

仅在docker环境中出现Python错误(名称或服务未知),python,docker,Python,Docker,我在docker容器中运行了一个python脚本,它应该会向我发送一封包含其结果的电子邮件 在没有docker环境的本地机器上,它可以工作,但在容器中,它给了我以下信息: grab_immo | Traceback (most recent call last): grab_immo | File "./main.py", line 236, in <module> grab_immo | main() grab_immo | File "./

我在docker容器中运行了一个python脚本,它应该会向我发送一封包含其结果的电子邮件

在没有docker环境的本地机器上,它可以工作,但在容器中,它给了我以下信息:

grab_immo    | Traceback (most recent call last):
grab_immo    |   File "./main.py", line 236, in <module>
grab_immo    |     main()
grab_immo    |   File "./main.py", line 229, in main
grab_immo    |     sendmail(item['link'], item['price'], item['titel'], item['description'])
grab_immo    |   File "./main.py", line 76, in sendmail
grab_immo    |     s = smtplib.SMTP(host=SMTP_HOST, port=SMTP_PORT)
grab_immo    |   File "/usr/local/lib/python3.7/smtplib.py", line 251, in __init__
grab_immo    |     (code, msg) = self.connect(host, port)
grab_immo    |   File "/usr/local/lib/python3.7/smtplib.py", line 336, in connect
grab_immo    |     self.sock = self._get_socket(host, port, self.timeout)
grab_immo    |   File "/usr/local/lib/python3.7/smtplib.py", line 307, in _get_socket
grab_immo    |     self.source_address)
grab_immo    |   File "/usr/local/lib/python3.7/socket.py", line 707, in create_connection
grab_immo    |     for res in getaddrinfo(host, port, 0, SOCK_STREAM):
grab_immo    |   File "/usr/local/lib/python3.7/socket.py", line 748, in getaddrinfo
grab_immo    |     for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
grab_immo    | socket.gaierror: [Errno -2] Name or service not known
grab_immo exited with code 0
环境部分:

MY_ADDRESS = os.environ['MY_ADDRESS']
PASSWORD = os.environ['PASSWORD']
SMTP_HOST = os.environ['SMTP_HOST']
SMTP_PORT = os.environ['SMTP_PORT']

谢谢你的阅读

编辑:docker合成零件

environment:
    - MY_ADDRESS = yyy@yyy.com
    - PASSWORD = yyy
    - SMTP_HOST = smtp.strato.de
    - SMTP_PORT = 587
取自

dockerfile:

FROM python:3

COPY grab_immo /grab_immo

RUN mkdir /data

ADD ./data/contacts /data
ADD ./data/run.log /data
ADD ./data/template /data

VOLUME /data

WORKDIR /grab_immo

RUN pip install -r requirements.txt

ENV MY_ADDRESS=value \
    PASSWORD=value \
    SMTP_HOST=value \
    SMTP_PORT=587

CMD [ "python", "./main.py" ]
docker-compose.yml

---
version: "2"
services:
  grab_immo:
    build: .
    image: yyy/grab_immo
    container_name: grab_immo
    environment:
    - MY_ADDRESS = 'stuff'
    - PASSWORD = stuff
    - SMTP_HOST = smtp.strato.de
    - SMTP_PORT = 587
    volumes:
      - /home/yyy/grab_immo_config:/data
    restart: unless-stopped

问题是您无法从您提供的
ENV
中获取值。请尝试以下操作:

import os
host = os.environ['SMTP_HOST']
port = os.environ['SMTP_PORT']
s = smtplib.SMTP(host=host, port=port)

什么是
SMTP\u主机
定义为?请参阅docker compose中编辑的帖子。。。这些是否也包含在您的dockerfile中?(即
ENV SMTP_HOST${SMTP_HOST}
)?在容器内的
/etc/hosts
上为
SMTP.strato.de
添加一个条目。要调试它,请在容器内部和外部ping
smtp.strato.de
。基本上,我认为您的错误与主机或端口的值不正确有关(如果存在上述情况,则两者都可能)。可能包括一些打印语句或其他形式的调试来检查容器中的值。你说得有点对,我的脚本中已经有了这一点,但是,一个简单的打印显示dockerfile中的默认值被捕获了,但我真的不明白为什么。需要删除docker compose中=sing周围的空格。。。不,工作很好。非常感谢
import os
host = os.environ['SMTP_HOST']
port = os.environ['SMTP_PORT']
s = smtplib.SMTP(host=host, port=port)